使用Number.isInteger()方法,javascript获取错误的结果

时间:2017-02-11 22:22:43

标签: javascript arrays string numbers

我一直在chrome控制台上尝试使用Number.isInteger()方法。 并且在执行for循环并使用console.log(arr);检查结果后,我得到一个只有一个值为1的数组,例如[1];

 var arr = [1,2,3,'some','string'];

for (var i = 0; i < arr.length; i++) {
    if (Number.isInteger(arr[i])) {
        arr.splice(arr.indexOf(arr[i], 1));
    }
}

任何人都有一个想法,如果我做错了什么的。谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

您遇到了一个主要问题,在循环播放时,您不断从数组中删除项目。每次删除项目时,您都必须返回一步(i--)。

var arr = [1,2,3,'some','string'];

for (var i = 0; i < arr.length; i++) {
    if (!isNaN(arr[i])) { // isNaN return true if it's not a valid number, so we have to inverse the test
        arr.splice(i, 1); // if it's a valid number remove the element at the index i (no need to search for the index using indexOf, we already have it its i)
        i--;              // if we remove an element, we have to go back one step (or we will leave one item behind every time we remove another)
    }
}


console.log(arr);

答案 1 :(得分:0)

您可以改用typeof:

var arr = [1,2,3,'some','string'];
for (var i = 0; i < arr.length; i++) {
  if (typeof arr[i] == 'number') {
    arr.splice(arr.indexOf(arr[i], 1));
  }
}

答案 2 :(得分:0)

`.splice()'方法对数组本身进行更改。

因此,对于数组的每次迭代,您都会从根本上改变它。

如果您希望数组只包含整数:

    var arr = [1,2,3,'some','string'];

    var newArray = [];

    arr.forEach(function(element) {
        if (Number.isInteger(element)){
            newArray.push(element);
        }
    });

    console.log(newArray);