簡體   English   中英

如何在 javascript 中使用帶有 for 循環的嵌套數組

[英]How to use nested arrays with a for loop in javascript

我的目標是能夠在 for 循環中訪問嵌套數組的屬性,例如給定數組。

[[1 , "one"],
[0.2 , "two"],
[0.3 , "three"]]

我希望能夠通過循環訪問索引 0。

我目前的做法是:

function printArray() {
  for (var i = arguments.length; i >= 0; i--) {
    print(arguments[i][0]);
  }
}

這怎么會產生這個錯誤

Uncaught TypeError: Cannot read property '0' of undefined

當我期待

0.3
0.2
1

遍歷嵌套數組的正確方法是什么?

for/of用於可迭代對象,這樣您甚至不必擔心索引取消引用。

 function printArray () { for (const arg of [...arguments]) { for (const nestedArg of arg) { console.log(nestedArg); } } }; printArray([ [1, "one"], [0.2, "two"], [0.3, "three"] ]);

在第一次迭代中,i=3,如果用作索引,則超過數組邊界

 let args = [ [1, "one"], [0.2, "two"], [0.3, "three"] ]; for (let i = args.length - 1; i >= 0; i--) { console.log(args[i][0]); }

有幾種方法可以循環遍歷數組。

哪一個是最好的?

這取決於它的用途和主觀性。

這是其中的一些。

 let arr = [[1, "one"], [0.2, "two"], [0.3, "three"]]; // forEach loop console.log('forEach loop'); arr.forEach((x, idx) => { console.log(x[0]); }); //for of loop console.log('for-of loop'); for (elem of arr){ console.log(elem[0]); } //for in loop console.log('for-in loop'); for (idx in arr){ console.log(arr[idx][0]); } // old-school for loop console.log('for loop'); for (let i = 0; i < arr.length; i++) { console.log(arr[i][0]); } // while loop console.log('while loop'); let i = 0; while (i < arr.length) { console.log(arr[i][0]); i++; } // do while loop console.log('do while loop'); let j = 0; do { console.log(arr[j][0]); j++; } while (j < arr.length);

但是關於你的功能。
1)最好將數組作為變量傳遞。
2) 數組的最后一個索引是它的長度 - 1

所以如果你想要一些甚至可以在舊瀏覽器中工作的東西。

按索引的升序循環:

function printArray(arr) {
  for (var i = 0; i < arr.length; i++) {
    print(arr[i][0]);
  }
}

按索引的降序循環:

function printArray(arr) {
  for (var i = arr.length - 1; i >= 0; i--) {
    print(arr[i][0]);
  }
}

arguments是傳遞給函數的參數數組,在您的情況下,您應該像這樣指向參數數組的第一個元素:

 let data = [[1, "one"], [0.2, "two"], [0.3, "three"]]; function printArray() { for (var i = arguments[0].length -1; i >= 0; i--) { console.log(arguments[0][i][0]); } } printArray(data);

錯誤:

未捕獲的類型錯誤:無法讀取未定義的屬性“0”

來自arguments.length,這將導致索引超出綁定數組錯誤

暫無
暫無

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

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