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