2017-07-13 28 views
0

提供初始數組(驅動函數中的第一個參數),後跟一個或多個參數。從初始數組中刪除與這些參數具有相同值的所有元素。如何使用Array.filter而不是傳統的循環-O(n^2)?

- >我想使用array.filter(),新的吧...而不是兩個圈......這是代碼...

function destroyer(arr) { 
 
var args = Array.from(arguments); 
 
var array = args.slice(1); 
 
//console.log(array); 
 
    
 
return array.forEach(function(val){ 
 
return arr.filter(function(tar){ 
 
    return tar!==val; 
 
}); 
 
}); 
 
    } 
 

 
var ans = destroyer([1, 2, 3, 1, 2, 3], 2, 3); 
 
console.log(ans);
它沒有得到我想要的解決方案?! 任何線索......

+2

什麼是所需的輸出? –

回答

1

.indexOf()功能,你可以檢查元素是否在數組中。

function destroyer(arr) { 
    var args = Array.from(arguments) 
    var array = args.slice(1) 

    return arr.filter(function(v){ 
     return array.indexOf(v) === -1 
    }) 
} 

var ans = destroyer([1, 2, 3, 1, 2, 3], 2, 3); 

console.log(ans)將顯示[1, 1]

1

你的方法工作得很好,你只是沒有正確返回值。

一個更好的方法是使用過濾器本身作爲另一個答案的建議,但如果出於某種原因,您希望它使用forEach和過濾這裏是如何做到這一點。

function destroyer(arr) { 
 
var args = Array.from(arguments); 
 
var array = args.slice(1); 
 
    
 
    array.forEach(function(val){ 
 
    arr = arr.filter(function(tar){ 
 
     return tar!==val; 
 
    }); 
 
    }); 
 
    return arr; 
 
} 
 

 
var ans = destroyer([1, 2, 3, 1, 2, 3], 2, 3); 
 
console.log(ans);

0

您可以使用以下。這具有O(N * M)的複雜性,我認爲這是您獲得最佳效果的最佳選擇。

function destroyer(arr) { 
 
    var args = Array.from(arguments); 
 
    var array = args.slice(1); 
 
    
 
    return arr.filter(function(tar){ 
 
    return array.indexOf(tar) === -1; 
 
    }); 
 
} 
 

 
var ans = destroyer([1, 2, 3, 1, 2, 3], 2, 3); 
 
console.log(ans);

相關問題