簡體   English   中英

使用 Number.isInteger() 方法得到錯誤的結果,javascript

[英]Getting wrong result with Number.isInteger() method, javascript

我一直在 Chrome 控制台上嘗試 Number.isInteger() 方法。 並在執行 for 循環並使用console.log(arr);檢查結果之后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));
    }
}

任何人都有一個想法,如果我做錯了什么。 感謝幫助。

您有一個主要問題,您在循環遍歷數組時不斷從數組中刪除項目。 每次刪除項目時,您都必須返回一步 ( 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);

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

`.splice()' 方法對數組本身進行更改。

因此,對於數組的每次迭代,您都在從根本上改變它。

如果您希望數組僅包含整數:

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

    var newArray = [];

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

    console.log(newArray);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM