Seek and Destroy(算法)


題目

金克斯的迫擊炮!

實現一個摧毀(destroyer)函數,第一個參數是待摧毀的數組,其余的參數是待摧毀的值。

提示

Arguments object

思路

函數中的有隱式的不確定個數的參數,而我們在函數中將會用到它,很顯然,這需要我們在  arguments 上做文章了。我們來看看MDN是怎么解釋  arguments 的: 

arguments 是一個類數組對象。代表傳給一個function的參數列表。

很顯然,既然是類數組對象,說明它不是真正的數組,沒有數組所具有的屬性和方法(除了  length 屬性)。為了便於我們接下來的運算,我們需要把arr后面的待摧毀的所有參數放進一個數組: 

var args = [];
for(var i = 1; i < arguments.length; i++){ args.push(arguments[i]); }

拿到了待摧毀的項構成的數組,接下來就是用  filter() 方法實現的簡單的去重操作了。 

arr.filter(function(item,index,array){ return args.indexOf(item) < 0; });

因為  filter() 不會改變原始數組,所以聲明一個變量接收上一步的返回結果,最后整個函數返回這個變量,問題解決啦! 

解法

function destroyer(arr) { // Remove all the values var args = []; for(var i = 1; i < arguments.length; i++){ args.push(arguments[i]); } var temp = arr.filter(function(item,index,array){ return args.indexOf(item) < 0; }); return temp; }

測試

destroyer([1, 2, 3, 1, 2, 3], 2, 3) 應該返回  [1, 1] . 

destroyer([1, 2, 3, 5, 1, 2, 3], 2, 3) 應該返回  [1, 5, 1] . 

destroyer([3, 5, 1, 2, 2], 2, 3, 5) 應該返回  [1] . 

destroyer([2, 3, 2, 3], 2, 3) 應該返回  [] . 

destroyer(["tree", "hamburger", 53], "tree", 53) 應該返回  ["hamburger"] .


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM