我正在尝试从数组列表中删除重复项。我尝试这样做的方法是使用reduce创建一个空数组,将所有未定义的索引推送到该数组上。我得到的错误,虽然
if(acc[item]===undefined){
^
TypeError: Cannot read property '1' of undefined
字符串
我的职能如下:
function noDuplicates(arrays) {
var arrayed = Array.prototype.slice.call(arguments);
return reduce(arrayed, function(acc, cur) {
forEach(cur, function(item) {
if (acc[item] === undefined) {
acc.push(item);
}
return acc;
});
}, []);
}
console.log(noDuplicates([1, 2, 2, 4], [1, 1, 4, 5, 6]));
型
7条答案
按热度按时间kmpatx3s1#
首先连接两个数组,然后使用filter()只过滤出唯一的项-
字符串
djmepvbi2#
关于如何调用方法以及从何处返回 acc,有许多问题:
字符串
你也可以使用call直接在 arguments 上调用 reduce:
型
上面的代码可以运行,但它不会产生正确的输出作为测试:
型
不会按你想的做。你需要做的是记住每个值,只有在它之前没有被看到的时候才把它推到 acc:
型
其他一些方法:
型
7vux5j2d3#
我的解决方案是--
字符串
yacmzcpb4#
使用
reduce
的原因是什么?因为我们可以很容易地做到这一点,首先合并这两个arrays
,然后使用Set
删除重复的键。看看这个
字符串
检查DOC,how Set works。
qpgpyjmq5#
寻找一个更平滑的解决MDN的完全相同的问题,我已经想出了解决方案,我觉得它简单而美好。我也刚刚在MDN上更新了它,并想在这里分享它(我真的是新的东西,所以抱歉,如果做错了什么)
字符串
(我是新手,希望对你有帮助)
8wigbo566#
前面的答案并没有针对大型阵列进行优化。下面的代码允许使用线性大O表示法:
字符串
os8fio9y7#
使用JS中的reduce函数从数组中删除重复元素
字符串