如何从数组中删除非数字项?
这个答案有什么问题吗?
function filterNumbersFromArray(arr) {
// Write the code that goes here
arr = arr.filter((item) => {
return (typeof item == 'number')
})
console.log(arr);
this.arr = arr;
}
var arr = [1, 'a', 'b', 2, false, 0, 5];
filterNumbersFromArray(arr);
for (var i = 0; i < arr.length; i++)
console.log(arr[i]);
答案 0 :(得分:2)
当你这样做时
filterNumbersFromArray(arr);
设置该函数,并将数组的引用从全局变量 arr 复制到函数变量 arr 。现在,您可以在两个位置上使用数组,因为它们引用相同的数据。现在你这样做:
arr = arr.filter(...)
将函数变量更改为指向正在过滤的新数组。全局变量不受影响,仍然指向旧数组。现在要解决这个问题,你可以:
this.arr = arr;
(非严格模式且函数不在对象内部!)也设置全局变量。然而,这是非常不可靠的。相反,您应该从函数中返回已过滤的数组:
const filterNums = arr => arr.filter(n => typeof n === "number");
所以你可以这样做:
arr = filterNums(arr);
没有那种hacky上下文。
答案 1 :(得分:0)
您应该返回已过滤的数组,然后重置arr = filterNumbersFromArray(arr);
function filterNumbersFromArray(arr) {
// Write the code that goes here
arr = arr.filter((item) => {
return (typeof item == 'number')
})
return arr;
}
var arr = [1, 'a', 'b', 2,false,0,5];
arr = filterNumbersFromArray(arr);
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]);
}