Javascript 如何从数组中删除所有数字?
我正在尝试删除数组中的所有数字。循环的工作方式完全符合我的要求,但是由于某种原因,splice()方法仍然跳过了一些元素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
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,添加了一个关于它的注释