Javascript 对象数组;一个减去另一个

11

简单来说,我想从一个数组中减去另一个数组。

这些数组是对象数组。我知道可以循环遍历一个数组,在每个项目上比较另一个数组中的值,但那看起来有点混乱。

感谢帮助,希望这个问题不太基础,我已经试过在Google上搜索但没有结果:(

编辑:

我希望从数组中删除的对象将具有相同的值,但却不是同一个对象(感谢@patrick dw)。我要完全删除初始数组中的子集。


1
这些数组是否持有对相同对象的引用,还是持有对具有潜在相同数据的唯一对象的引用? {a:1} != {a:1}var a = b = {a:1}; a == b - user113716
我不太确定这个问题是否足够具体。您想以何种方式减去这些数组?您是希望将它们相减,使得新数组的第n个元素是第一个数组的第n个元素减去第二个数组的第n个元素吗?还是您的意图是对这些数组进行某种“集合差异”操作? - avpx
感谢您的评论。我已经编辑了问题,以更好地解释问题。 - neolaser
4个回答

28

这个答案是从https://dev59.com/v1cO5IYBdhLWcg3wtz71#53092728复制的,附加了一个注释和一个使用对象解决方案。

这段代码过滤数组A。从A中删除所有包含在B中的值。

const A = [1, 4, 3, 2]
const B = [0, 2, 1, 2]
console.log(A.filter(n => !B.includes(n)))

与对象相同:

const A = [{id:1}, {id:4}, {id:3}, {id:2}]
const B = [{id:0}, {id:2}, {id:1}, {id:2}]
console.log(A.filter(a => !B.map(b=>b.id).includes(a.id)))


3

http://phpjs.org/functions/index

JavaScript中没有内置的方法来实现此操作。如果您查看此网站,会发现有许多与PHP具有类似语法的数组函数。


链接未找到。 - Dennis Hackethal
@weltschmerz 这是从Wayback Machine中的副本 https://web.archive.org/web/20130713181607/http://phpjs.org/functions/ - sissonb

2

1
它应该从列表a中删除所有与列表b中相同的值,并保持其顺序。
  let a = [0, 2, 5, 6, 1];
  let b = [2, 6, 2, 5, 0];

  function arrayDiff() {
    for (i of b) {
      for (j of a) {
        if (i === j) {
          a.splice(a.indexOf(j), 1);
        }
      }
    }
    return a;
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接