我对这个问题的简单的解决方案:在JavaScript中,是否有可能只使用.filter()删除重复项(第一个实例是保留的)?
function removeExtra(arr) {
var args = [...arguments]
.reduce(function(prev,curr){return prev.concat(curr)});
var answer = [];
for (var i = 0; i < args.length; i++) {
if (answer.indexOf(args[i]) == -1)
answer.push(args[i]);
}
return answer;
}
console.log(removeExtra([1, 3, 2], [5, 2, 1, 4], [2, 1]));
//-> Returns [1, 3, 2, 5, 4]
但是,我想练习的JavaScript的功能性方法的逻辑,在这种情况下,.filter()
。有没有办法这样做?
function removeExtra(arr) {
return [...arguments]
.reduce((pre,cur) => pre.concat(cur))
//.filter(x => ???);
}
console.log(removeExtra([1, 3, 2], [5, 2, 1, 4], [2, 1]));
//-> Should be [1, 3, 2, 5, 4]
编辑1:
至于建议,目前正在寻找Set()
。这是我第一次遇到它。马上回来研究工作!
编辑2:
BIG由于@Kaspars和@gcampbell用于引入Set()
!! 我现在有我的解决方案:
function removeExtra(someArgs) {
return [... new Set(
[...arguments].reduce(function(prev,curr){
return prev.concat(curr);
})
)]
}
这仅仅是一个次要的修订gcampbell的回答,因为我必须将Set
转换回Array
使用[... new Set()]
如何http://stackoverflow.com/a/14821032/670396 – elclanrs
'新集([...参数]。降低((预,当前)=> pre.concat(现))' ? – gcampbell