[英]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.