JS,奇怪的替代行为

时间:2019-06-13 11:58:03

标签: javascript loops

我收到以下格式的数据

data = [
  {
    name: 'example1',
    options: {
      'label1': {
        param2: 'hey'
      },
      'label2': {
        param2: 'hey2'
      }
    }
  },
  ...
]

然后,我使用以下操作:

  let repos = [];
  data.map(repo => {
    Object.keys(repo.options).map(k => {
      repos.push(Object.assign(repo, {
        param1: k,
        param2: options[k].param2
      }));
    });
  });

我希望上面的代码会产生

repos = [
  {
    name: 'exmaple1',
    param1: 'label1',
    param2: 'hey'
  },
  {
    name: 'exmaple1',
    param1: 'label2',
    param2: 'hey2'
  },
  ...
]

但是,它会产生

repos = [
  {
    name: 'exmaple1',
    param1: 'label1',
    param2: 'hey'
  },
  {
    name: 'exmaple1',
    param1: 'label1',
    param2: 'hey'
  },
  ...
]

我不知道为什么。由于某些原因,键上的最后一个循环在所有先前的迭代中都覆盖了param1和param2。任何想法如何解决?谢谢!

1 个答案:

答案 0 :(得分:0)

为什么不简单地做:

repos.push({
   name: repo.name,
   param1: k,
   param2: repo.options[k].param2
});

演示:

data = [{
  name: 'example1',
  options: {
    'label1': {
      param2: 'hey'
    },
    'label2': {
      param2: 'hey2'
    }
  }
}]

let repos = [];
data.map(repo => {
  Object.keys(repo.options).map(k => {
      repos.push({
        name: repo.name,
        param1: k,
        param2: repo.options[k].param2
      });
  });
});

console.log(repos);