我對這個問題的簡單的解決方案:在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