JS, странное поведение переопределения - PullRequest
0 голосов
/ 13 июня 2019

Я получаю данные в формате:

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 голосов
/ 13 июня 2019

Почему бы просто не сделать:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...