我有一个直截了当的解决方案:
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]
正如所建议的那样,目前正在研究Set()
。这是我第一次遇到它。马上回去做研究工作!
非常感谢@Kaspars和@gcampbell介绍Set()
!!
我现在有了解决方案:
function removeExtra(someArgs) {
return [... new Set(
[...arguments].reduce(function(prev,curr){
return prev.concat(curr);
})
)]
}
这只是对gcampbell回答的一个小修改,因为我必须使用Set
将Array
转换回[... new Set()]
答案 0 :(得分:2)
您可以使用Set进行此操作。
function removeExtra() {
const uniques = new Set();
for(const array of ...arguments) {
for(const element of array) {
uniques.add(element);
}
}
return Array.from(uniques);
}