Javascript 如何从数组中删除所有数字?

Javascript 如何从数组中删除所有数字?,javascript,Javascript,我正在尝试删除数组中的所有数字。循环的工作方式完全符合我的要求,但是由于某种原因,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

我正在尝试删除数组中的所有数字。循环的工作方式完全符合我的要求,但是由于某种原因,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
的问题是,您在迭代数组时正在更改数组

要手动执行
过滤器
所做的操作,方法应更类似于:

let wp = 0;
for (let i=0; i<arr.length; i++) {
    if (isNaN(arr[i])) arr[wp++] = arr[i];
}
arr.length = wp;
设wp=0;

对于(设i=0;i使用此选项,因为它使用的过滤器代码比循环少:

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

log(arr.filter(x=>isNaN(x))
为什么不从头开始迭代

顺便说一句,您需要索引,因为您使用值搜索索引,如果数组中有多个相同的值,则会出现错误

然后从一开始就进行迭代就会出现问题,因为在这种情况下,拼接会使数组长度变短,而下一个索引就是实际索引

让数组=['1','2','3','4','5','notanumber','6'],
i=数组长度;
而(我--){
if(!isNaN(array[i])array.splice(i,1);
}

console.log(数组);
您可以尝试删除所有这样的数字

let arr = ['1', '2', '3', '4', '5', 'notanumber', '6'];
arr  = arr.filter( element=> isNaN(parseInt(element)) )
console.log(arr); //output is ['notanumber']
在不是number的元素中使用parseInt函数 返回将是


因此,我们可以使用过滤器仅删除数字

您在循环时同时更改数组,这可能会重复保留非数字number@6502没错,OP想删除numbers@VFDan你误解了,你的代码会保留所有NaN的字符。OP想要的是相反的我要cra吗zy在这里?代码片段OP特别指出,
//预期输出为['notanumber']
,这就是这个答案所提供的…@Frontear阅读了chevybow上面的评论。这将创建一个新数组,而不是变异旧数组。@NinaScholz:true,添加了一个关于它的注释