【问题标题】:Getting wrong result with Number.isInteger() method, javascriptNumber.isInteger() 方法得到错误的结果,javascript
【发布时间】:2017-02-11 22:22:43
【问题描述】:

我一直在 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));
    }
}

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

【问题讨论】:

  • 你只想保留整数??
  • 方法没有完整的浏览器支持。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • .splice() 调用 arr 的预期结果是什么?
  • 不,易卜拉欣·马里尔。我想要相反的。
  • 这不是主要问题......它是您在 for 循环中进行拼接的数组长度更改。注意文档中的 polyfill 以添加浏览器支持

标签: javascript arrays string numbers


【解决方案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);

【讨论】:

    【解决方案2】:

    你可以使用 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));
      }
    }
    

    【讨论】:

    • 不幸的詹尼,我得到了同样的结果。
    • 问题出在循环拼接
    【解决方案3】:

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

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

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

        var arr = [1,2,3,'some','string'];
    
        var newArray = [];
    
        arr.forEach(function(element) {
            if (Number.isInteger(element)){
                newArray.push(element);
            }
        });
    
        console.log(newArray);
    

    【讨论】:

    • 好一个。它有效,只需添加! if 语句中的 Number 之前只有字符串
    • ES6 中 Number 对象的好读物:hackernoon.com/…
    猜你喜欢
    • 2017-09-04
    • 2020-03-01
    • 2023-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    相关资源
    最近更新 更多