【问题标题】:Nested Multidimension Array in JavascriptJavascript中的嵌套多维数组
【发布时间】:2016-06-17 09:52:41
【问题描述】:

鉴于此代码:

<script type="text/javascript">
    var arr = [];
    var names = [{name : 'George'}, {name : 'Ringo'}, {name : 'Paul'}, {name : 'John'}];
    var surnames = [{surname : 'Harrison'}, {surname : 'Starr'}, {surname : 'McCartney'}, {surname : 'Lennon'}];

    for (i = 0; i < names.length; i++) {
            arr['firstname'] = names[i];
        for (j = 0; j < surnames.length; j++) {
            arr['firstname']['surname'] = surnames[j];
            arr['firstname']['surname']['index'] = i;
            console.log(arr);
        }
    }
</script>

运行时,内部循环中的输出将仅显示所有条目上姓氏数组(列侬)和 i(3) 的最后一个值。我想要实现的输出是对于每个名字,姓氏将分配给所有名字(例如 John Harrison、John Starr 等),并且 index(i) 将从 0 增加到 3。谢谢。

【问题讨论】:

  • 预期输出是什么?
  • javascript 中没有关联数组,因此您不能按原样将任何内容存储到 arr['firstname'] 中。
  • @Dellirium,OP 可以使用他的代码存储数据:如果使用命名索引,JavaScript 会将数组重新定义为标准对象。

标签: javascript


【解决方案1】:

你想要这样的东西吗?

var arr = [];
var names = [{
  name: 'George'
}, {
  name: 'Ringo'
}, {
  name: 'Paul'
}, {
  name: 'John'
}];
var surnames = [{
  surname: 'Harrison'
}, {
  surname: 'Starr'
}, {
  surname: 'McCartney'
}, {
  surname: 'Lennon'
}];

for (i = 0; i < names.length; i++) {
  arr.push({
      index: i,
      firstname: names[i].name,
      surname: surnames[i].surname
    });
  }
  console.log(arr);

【讨论】:

    【解决方案2】:

    这样试试,

    for (i = 0; i < names.length; i++) {
           var obj = new Object;
            obj['name'] = names[i];
            obj['name']['surname'] = surnames[i].surname;
            obj['index'] = i;
            arr.push(obj);
    
    }
       console.log(arr);
    

    【讨论】:

    • arr['firstname'] 不是拥有密钥的对象!
    【解决方案3】:

    看起来你想要所有名字和姓氏的笛卡尔积。

    试试这个

     var arr = [];
     var names = [{
       name: 'George'
     }, {
       name: 'Ringo'
     }, {
       name: 'Paul'
     }, {
       name: 'John'
     }];
     var surnames = [{
       surname: 'Harrison'
     }, {
       surname: 'Starr'
     }, {
       surname: 'McCartney'
     }, {
       surname: 'Lennon'
     }];
    
     for (i = 0; i < names.length; i++) 
     {
       for (j = 0; j < surnames.length; j++) 
       {
         var tmpObj = JSON.parse(JSON.stringify(names[i]));
         tmpObj['surname'] = surnames[j].surname;
         tmpObj['index'] = i;
         arr.push(tmpObj);
       }
     }
     console.log(arr);

    你也可以这样做

    Object.create(names[i]) 
    

    而不是

    JSON.parse(JSON.stringify(names[i]));
    

    【讨论】:

    • 你检查过你自己的代码吗?您将姓名和姓氏的所有组合加在一起。
    • @Craicerjack 是的,这就是我虽然 OP 要求的。
    • @Craicerjack OP 说surnames will be distributed to all firstnames
    • 正是我想要的输出。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-02-13
    • 2022-01-13
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多