You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript:如何使用deepmerge从数组中删除元素

解决deepmerge数组累加而非替换的问题

你遇到的是deepmerge默认的数组合并行为——它默认会把两个数组**拼接(concat)**在一起,所以才会出现重复元素的情况。不过不用担心,deepmerge本身支持自定义数组合并策略,完全不用重写整个函数就能满足你的需求。

方案1:直接用目标数组替换源数组(匹配你的期望输出)

如果你的需求是让b中的数组完全覆盖a中的对应数组,只需要在调用dp时传入自定义的arrayMerge选项:

const dp = require('deepmerge');
const a = { moderation: { administrator_roleIds: [ '863696108285591562', '851483467047763978' ] } };
const b = { moderation: { administrator_roleIds: [ '863696108285591562' ] } };

const mergedResult = dp(a, b, {
  // 自定义数组合并逻辑:直接返回b中的数组,覆盖a的原数组
  arrayMerge: (destArray, srcArray) => srcArray
});

console.log(mergedResult);
// 输出:{ moderation: { administrator_roleIds: [ '863696108285591562' ] } }

这里的arrayMerge函数接收两个参数:destArray是a中的原数组,srcArray是b中的目标数组,我们直接返回srcArray就实现了完全替换的效果,完美匹配你要的期望输出。

方案2:合并后去重(扩展场景)

如果你之后有合并数组并保留唯一元素的需求,也可以用这个自定义策略:

const dp = require('deepmerge');
const a = { moderation: { administrator_roleIds: [ '863696108285591562', '851483467047763978' ] } };
const b = { moderation: { administrator_roleIds: [ '863696108285591562' ] } };

const mergedResult = dp(a, b, {
  arrayMerge: (destArray, srcArray) => {
    // 合并两个数组后用Set去重,再转回数组
    return [...new Set([...destArray, ...srcArray])];
  }
});

console.log(mergedResult);
// 输出:{ moderation: { administrator_roleIds: [ '863696108285591562', '851483467047763978' ] } }

为什么这个方案适合你?

因为你提到必须使用基于deepmerge的函数,这个自定义选项只需要在调用时传入,完全不需要修改原有函数的逻辑,不会增加额外的工作量,完美解决你的痛点。

内容的提问来源于stack exchange,提问作者squarfiuz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 11:32:27