我正在尝试使用 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/