如何从数组中删除非数字项?

时间:2018-03-11 08:34:45

标签: javascript

如何从数组中删除非数字项?

这个答案有什么问题吗?

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]);

2 个答案:

答案 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]);
}