Javascript - при динамическом добавлении свойств к объекту последнее значение устанавливается для всех свойств - PullRequest
0 голосов
/ 29 апреля 2020

Я зацикливаю некоторые даты, добавляю их динамически как свойства к объекту и присваиваю значение каждому из них. Свойства добавляются, но все они в конечном итоге устанавливаются на значения, назначенные на последней итерации.

Есть некоторая проблема со ссылками, я думаю. Я не уверен, где именно проблема и что делать.

Ниже также доступна скрипка с ведением журнала.

  let dates = ['2020-04-28','2020-05-3','2020-05-16']
  let pricesObj = {};

var entry = { 
    price: 45,
    time_id: 2
 }

dates.map( date => {

    entry.date = date

    if( !(date in pricesObj)){

      //Add new date entry
      pricesObj[date] = []
      pricesObj[date].push(entry)   //<-- this seems to be assigned to all dates, not just the current

    }

 })
console.log('updating price with obj: ' , JSON.stringify(pricesObj));

В журнале показано объект с тремя свойствами даты, и все они имеют последнюю «запись» с неправильной датой.

1 Ответ

2 голосов
/ 29 апреля 2020

Вы создали только одну запись, а затем отправили ее в разные массивы. Создайте записи заново каждый раз, когда они вам нужны.

dates.forEach(date => {
  if (!(date in pricesObj)) {
    //Add new date entry
    pricesObj[date] = [{
      date,
      price: 45,
      time_id: 2
    }];
  }
});

Вы не создаете новый массив для каждого элемента в исходном массиве дат, поэтому не используйте map. Чтобы просто повторить, используйте forEach.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...