基于 Javascript 的嵌套 for 循环以及对象

Javascript based nested for loop along with Objects

本文关键字:对象 循环 for Javascript 嵌套 基于      更新时间:2023-09-26

我是javascript的新手。 当我使用对象和嵌套循环时。

var a = [{b:[{c:null}]}]
for(var x= 0 ; x<10;x++){
  for(var y= 0 ; y<10;y++){
    console.log(a);
    a[x].b[y].c = y;
    console.log(a);
  }
}

我收到错误TypeError: Cannot set property 'c' of undefined有人可以解释为什么它像这样工作。我正在寻找这样的

a[0].b[0].c = 1;
a[0].b[1].c = 2;......
a[1].b[0].c = 1;....
a[9].b[9].c = 9;

我收到类似类型错误的错误:无法设置属性"c" 未定义 有人可以解释为什么它像这样工作吗

因为数组的大小ab 是 1,并且你的 y 变成 1 时,它试图访问数组 b 中的第 2 项,它将返回 undefined(因为该值不存在)。

所以b[1].c -> undefined.c ->错误(如下)

类型错误: 无法设置未定义的属性"c"

因为在它抛出此错误时,y大于 0,但您的 b 数组中只有 1 个元素。

我将假设,在控制台中,您会看到:

[object Object]

[object Object]

[object Object]

然后是错误。这将表明内部 for 循环处于第二次迭代中。

在发生错误时,可以将代码解释为:

a[0].b[1].c = 1;

因为你要迭代它 10 次,所以它的迭代次数应该与数组的长度相同,所以在第一个循环中使用 a.length,在第二个循环中使用a[x].b.length

var a = [{b:[{c:null}]}]
for(var x= 0 ; x<a.length;x++){
  for(var y= 0 ; y<a[x].b.length;y++){
    console.log(a);
    a[x].b[y].c = y;
    console.log(a);
  }
}

你可以尝试这样的事情:

Array.forEachfor..in的组合

var a = [{b:[{c:"Test"}]}]
// a is Array. Use Array.forEach
a.forEach(function(item){
  
  // Check if current element is Object. If yes, use for..in
  if(typeof(item) === "object"){
    for(k in item){
      
      // Check if current item is Array and again loop over it
      if(Array.isArray(item[k])){
        item[k].forEach(function(o){
          
          // Print necessary value.
          console.log(o.c);
        })
      }
    }
  }
});