javascript - 找出多个数组中的差异。使用减少

标签 javascript underscore.js

我正在尝试使用 reduce 重新创建下划线 js 函数差异。 差异接受多个数组并返回与第一个数组相似的所有值。所以 [1,2],[2,3],[1,3] 应该吐出 [1,2,2,1]。

我正在考虑遍历我的每个子数组(rest),如果我的子元素的值在我的第一个数组中有一个索引,那么我会将该元素插入我的累加器值(这是一个空数组)。

出于某种原因,我没有在预期 [1,2,3,2,1,2] 的位置获得预期的输出。 相反,我得到 [ [ 1, 2 ], [ 2, 4 ], [ 1, 2 ] ]。任何人都可以帮助我使用 reduce 进行重写。谢谢。

function difference(arrays){
var arrayed=Array.prototype.slice.call(arguments);
var first=arrayed[0];
var rest=arrayed.slice(1);

return reduce(first,function(acc,cur){
  forEach(rest,function(sub){
    if (sub.indexOf(cur)>-1){
      acc.push(sub);
    }});
    return acc;
  },[]);
}

console.log(difference([1,2,3],[2,4],[1,2],[4,5]));

我知道我调用 forEach 的方式不同,但这是因为我自己的 forEach 版本接受两个参数。

最佳答案

至于你的previous question ,你需要在数组上调用数组方法,而不是将它们作为参数传递,所以不

return reduce(first,function(acc,cur){...})

但是

return first.reduce(function(acc,cur){...});

在你的函数中:

var first=arrayed[0];
var rest=arrayed.slice(1);

可以使用splice一步替换:

var first = arrayed.splice(0, 1)

并使用arrayed 而不是rest。但无论如何都没有必要。如果没有提供累加器,则使用第一个值,因此(对变量进行一些重命名):

function difference(){
  var args = Array.prototype.slice.call(arguments);

  return args.reduce(function(acc, cur){
    cur.forEach(function(value){
      if (acc.includes(value)){
        acc.push(value);
      }
    });
    return acc;
  });
}

console.log(difference([1,2,3],[2,4],[1,2],[4,5]));

关于javascript - 找出多个数组中的差异。使用减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43794336/

相关文章:

javascript - 使用 Javascript 扩展表单

javascript - 鉴于主干js,单击按钮不起作用

javascript - 浅克隆对象是什么意思?

javascript - 如何在没有javascript的情况下检测屏幕分辨率?

javascript - angular 9 loadchildren 不加载 css、js、图像文件

javascript - 通过创建 HTML 表来调用 javascript 函数

javascript - 如何检查一个列表是否包含另一个列表中的任何值?

javascript - 使用下划线对数组中的嵌套对象进行排序

javascript - Lodash & Underscore "each"over localStorage 给出了意想不到的结果

javascript - 当包含 jQuery 时,HTML 选择元素类型为 'select-one'。它是跨浏览器值吗?