【问题标题】:value has been overrite in nested forLoop issue值已在嵌套 for Loop 问题中被覆盖
【发布时间】:2018-03-28 04:23:47
【问题描述】:

我不确定我的代码有什么问题,值已在嵌套的 for 循环中被覆盖,请帮助我调试以下代码。 var1 是一个数组,其中包含另一个名为 list 的数组。 Var2 也是一个数组,每个 var2.data 都等于 var1。我尝试设置每个 var2.data 的 list.id = var2.index,但由于某种原因,var2 内的所有 list.id 都等于 2,似乎该值已被覆盖。请看下面:

    let var1 = [{
        'name': 'name1',
        'list': [{
            id: 0,
            a: "test1",
            b: 'test2'
          },
          {
            id: 0,
            a: "aac",
            b: 'test2'
          },
          {
            id: 0,
            a: "aad",
            b: 'test2'
          },
        ]
      },
      {
        'name': 'name2',
        'list': [{
            id: 0,
            a: "test1",
            b: 'test2'
          },
          {
            id: 0,
            a: "aac",
            b: 'test2'
          },
          {
            id: 0,
            a: "aad",
            b: 'test2'
          },
        ]
      }
    ];

    let var2 = [{
        claim: 'claim1',
        ifn: '1',
        data: []
      },
      {
        claim: 'claim2',
        ifn: '2',
        data: []
      },
      {
        claim: 'claim3',
        ifn: '3',
        data: []
      },
    ]

    var2.forEach((item, i) => {
      var1.forEach(list => {
        list.list.forEach(val => {
          val.id = i;
        })
        item.data = list;
      })
    })
   console.log(var2)

我想让每个list.id等于var2的索引,如下所示,真的不知道如何使这段代码工作,请帮助~

var2 = [
{ claim:'claim1',ifn:'1',
  data:
      [{
        'name':'name1',
        'list':[
            {id:0,a:"test1",b:'test2'},
            {id:0,a:"aac",b:'test2'},
            {id:0,a:"aad",b:'test2'},
               ]
        },
        {
         'name':'name2',
         'list':[
                {id:0,a:"test1",b:'test2'},
                {id:0,a:"aac",b:'test2'},
                {id:0,a:"aad",b:'test2'},
               ]
      }]
},
{ claim:'claim2',ifn:'2',
  data:
      [{
        'name':'name1',
        'list':[
            {id:1,a:"test1",b:'test2'},
            {id:1,a:"aac",b:'test2'},
            {id:1,a:"aad",b:'test2'},
         ]
        },
    {
    'name':'name2',
        'list':[
                {id:1,a:"test1",b:'test2'},
                {id:1,a:"aac",b:'test2'},
                {id:1,a:"aad",b:'test2'},
               ]
      }]
},
{ claim:'claim3',ifn:'3',
  data:[{
        'name':'name1',
        'list':[
                {id:2,a:"test1",b:'test2'},
                {id:2,a:"aac",b:'test2'},
                {id:2,a:"aad",b:'test2'},
                ]
        },
        {
        'name':'name2',
        'list':[
            {id:2,a:"test1",b:'test2'},
                {id:2,a:"aac",b:'test2'},
                {id:2,a:"aad",b:'test2'},
               ]
     }]
  }
]

【问题讨论】:

  • 嗨@lin - 欢迎来到 StackOverflow。您所写的问题有点难以解析——您可能想查看How to Ask 以获取有关制作格式正确的问题的提示。这将有助于为您的帖子绘制高质量的答案。祝你好运,编码愉快!
  • 您的下部对象中似乎有分号,这是无效的语法,尚不完全清楚您实际要查找的结构是什么。
  • 结构不清楚,我稍微搞清楚了,希望能更容易理解。
  • 如何检查合并?同一个索引会合并数据吗?

标签: javascript for-loop nested


【解决方案1】:

据我了解,您希望 var2 中的每个 data 值都指向 var1。以下循环将执行此操作:

var2.forEach(item => item.data = var1);

但是,由于每个项目都指向同一个对象,这意味着如果您更改 var2 中的任何 data 项目,它会全部更改。

如果您需要副本是唯一的,您可以使用以下内容制作新副本:

const getVar1 = () =>  [
  {
    'name': 'name1',
    'list':  [
      {
        id: 0,
        a: "test1",
        b: 'test2'
      },
      {
        id: 0,
        a: "aac",
        b: 'test2'
      },
      {
        id: 0,
        a: "aad",
        b: 'test2'
      },
    ]
  },
  ...
];

然后你可以像这样使用它:

var2.forEach(item => item.data = getVar1())

【讨论】:

    【解决方案2】:

    在这里您需要创建新副本。但是想要的结果你可以使用这个代码 -

    for (var i = 0; i < var2.length; i++) {
    
      var el = var2[i], arr = [];
    
      for (var j = 0; j < var1.length; j++) {
    
        var o = var1[j];
    
        for (var k = 0; k < o.list.length; k++) {
          var ob = o.list[k];
          console.log(ob);
          ob.id = i;
        }
    
        arr.push(o);
      }
    
      el.data = arr;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多