參考http://singsing.io/blog/fcc/basic-seek-and-destroy/#comments
在做這題的時候,用的方法一,最基本的解法,循環(huán)遍歷刪除,但是總是不對,后來看解答才煥然大悟
平時寫循環(huán),我們都習慣從 0 開始遍歷。但有時候,如果從 0 開始遍歷是會出錯的。
原因很簡單,如果我們刪除了某一個元素,那么在這之后的所有元素的 index 都會減一。然后我們通過 i++ 來進入下一次循環(huán),相當于跳過了一個元素
function destroyer(arr) {
// 先把 arguments 轉(zhuǎn)換為數(shù)組
var arg = [].slice.call(arguments);
// 保存下來第一個參數(shù),就是要操作的數(shù)組
var sourceArr = arg[0];
// 后續(xù)的參數(shù)均為需要刪除的數(shù)字,我們也把這些數(shù)字放到一個數(shù)組里
var refArr = arg.slice(1);
// 可以思考一下,這里為什么不能從 0 開始遍歷
for (var i = sourceArr.length - 1; i >= 0; i--) {
// 如果當前的元素存在于 refArr 中,就把它刪掉
if (refArr.indexOf(sourceArr[i]) > -1) {
sourceArr.splice(i, 1);
}
}
return sourceArr;
}