javascript - 两个数组的差异

标签 javascript arrays

我有一个关于找出两个数组之间差异的快速问题。我找到了一大块 JavaScript 代码来做我想做的事 here并对其进行了一些修改:

JS

function diffArray(arr1, arr2) {
  var newArr = [];
  var myArr = arr1.concat(arr2);

  newArr = myArr.filter(function(item){
     return arr2.indexOf(item) < 0 || arr1.indexOf(item) < 0;
  });

  return newArr;
}

diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]);

但是,我不确定我是否真的理解这里的过滤器功能是做什么的。谁能给我一个清晰的解释,说明这是如何工作的。

注意:我已经了解过滤器函数的基础知识。我正在寻找此过滤器的具体解释。

最佳答案

newArr = myArr.filter(function(item){
   return arr2.indexOf(item) < 0 || arr1.indexOf(item) < 0;
});

Array#filter 函数迭代 concat 函数新建数组的每个元素(包含 arr1arr2 数组的每个元素)。

如果在某些迭代中至少满足 arr2.indexOf(item) < 0arr1.indexOf(item) < 0 条件之一(返回 true ),则 Array#filter 函数过滤掉(返回)指定的(实际迭代的)元素。

如果迭代元素同时在 arr1arr2 中,则 indexOf 函数将返回它的索引(高于 0 )——条件将返回 false (它不小于 0 )。然后我们将收到 false || false,即 false,该元素不会包含在 newArr 数组中,包含唯一元素。

如果给定元素仅在一个数组中(它不存在于第二个数组中 - 它的索引将返回 -1 - 它将满足 < 0 条件) - 其中一个条件将返回 true ,因此两者条件将变为 true || false,即 true - 给定元素包含在 newArr 数组中。

关于javascript - 两个数组的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43505025/

相关文章:

vb.net - 在数组中查找正方形

php - 从 PHP 和 MySQL 中的 2 列创建关联数组

javascript - 使用嵌套文档 lodash 对文档数组进行排序

Javascript 删除机制

javascript - OpenLayers刷新策略问题

javascript - 如何在html中输出一个json对象?

javascript - 在数组中查找对象值 Vue Javascript Vuex?

javascript - 如何使用Lodash的unionBy并合并嵌套数组?

javascript - ES6 模块 - 3 种导入文件的方式

javascript - 如何在下拉选择中禁用某些选项?