繁体   English   中英

找到多个数组的差异。 使用reduce

[英]finding the difference in multiple arrays. using reduce

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

我正在考虑循环遍历每个子数组(休息),如果我的子元素的值在我的第一个数组中有一个索引,那么我将把该元素推送到我的累加器值(这是一个空数组)。

有些原因我没有达到预期的输出[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版本接受了两个参数。

这是一个解决方案:

function difference(arrays){
  var arrayed = Array.prototype.slice.call(arguments);
  var first = arrayed.splice(0,1)[0]; // edit, thanks robG
  var tmp = [];

  return arrayed.reduce(function(acc, arr) {
    return acc.concat(arr.filter(function(el) {
      return first.includes(el);
    }));
  }, first);
}

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

在'rest'数组上使用javascript reduce方法,使第一个数组成为累加器的默认值,使用第一个数组过滤数组,并将结果连接到累加器。

希望能帮助到你,
最好的祝福

可以试试这个

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

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

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

至于你上一个问题 ,你需要在数组上调用数组方法,而不是将它们作为参数传递给所以不是

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

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

在你的功能:

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

可以使用拼接一步替换:

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])); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM