javascript - javascript如何删除 array 中的所有数字?

我想从 array 中删除所有的数字。 循环完全按照我的要求工作,但是 splice() 方法由于某些原因仍然跳过某些元素。


let arr = ['1', '2', '3', '4', '5', 'notanumber', '6'];



for (let element of arr) {


 let index = arr.indexOf(element);


 let check = isNaN(element);


 if (check === false) {


 arr.splice(index, 1);


 };


};



console.log(arr);



预期输出为:['notanumber']
当前输出为:['2','4','notanumber']

时间:

这样做会


arr = arr.filter(x => isNaN(x));



对每个元素调用 splice的问题在于在迭代过程中,你正在更改 array 。

要执行 filter 所做的操作,该方法应该更类似于:


let wp = 0;


for (let i=0; i<arr.length; i++) {


 if (isNaN(arr[i])) arr[wp++] = arr[i];


}


arr.length = wp;



换句话说,保持"写入指针" wp 和每个要保持它的位置的array 元素,而不移动仍需要处理的元素。 只有在最后你才能调整结果的大小。

这里第二种方法将会改变 array,而 filter 则会返回一个新的array,如果在程序中存在它的他引用。

使用这个:


let arr = ['1', '2', '3', '4', '5', 'notanumber', '6'];


console.log(arr.filter(x => isNaN(x)))

为什么不从末尾迭代?

顺便说一句,你需要索引,因为你搜索一个带有值的索引,如果你在数组中有多个相同的值,则会出错。

然后通过从start开始迭代来解决问题,因为在这种情况下,拼接会使数组长度更短,下一个索引就是实际索引。


let array = ['1', '2', '3', '4', '5', 'notanumber', '6'],


 i = array.length;



while (i--) {


 if (!isNaN(array[i])) array.splice(i, 1);


}



console.log(array);
...