繁体   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