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

如何按出现次数从目标数组中移除另一数组的对应元素?

解决按次数移除数组元素的问题

嘿,我懂你的困扰!_.difference返回空数组是因为它的逻辑是去重后求差集——它只会看元素是否存在,完全不考虑出现次数。你的两个数组去重后都是["111", "222"],自然找不到差异元素啦。

要实现「按指定次数移除元素」的需求,而且还要保持原数组的顺序的话,这里有个简单的原生JS实现,正好匹配你想要的结果:

const allValues = ["111", "111", "111", "222", "111", "222"];
const removingValues = ["111", "111", "222"];

// 第一步:统计要移除的每个元素的次数
const removeCounter = {};
removingValues.forEach(val => {
  removeCounter[val] = (removeCounter[val] || 0) + 1;
});

// 第二步:遍历原数组,根据计数筛选元素
const remainingValues = [];
allValues.forEach(val => {
  if (removeCounter[val] > 0) {
    // 如果这个元素还需要移除,就减少计数,不加入结果
    removeCounter[val]--;
  } else {
    // 否则加入结果数组
    remainingValues.push(val);
  }
});

console.log(remainingValues); // 输出:["111", "222", "111"]

逻辑说明:

  1. 先统计removingValues里每个元素需要被移除的次数,存在removeCounter对象中;
  2. 遍历原数组allValues,遇到元素时先检查是否还有剩余的移除次数:
    • 如果有,就减少对应计数,跳过这个元素;
    • 如果没有,就把这个元素加入结果数组。

这样既保证了移除的次数正确,又保留了原数组的元素顺序,完美符合你的需求~

如果想用Lodash简化统计步骤,也可以用_.countBy替代手动统计:

const removeCounter = _.countBy(removingValues);

后面的遍历逻辑完全一样,结果也一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:33:12