Зачем вызывать Object.create внутри array.push возвращает список пустых объектов? - PullRequest
0 голосов
/ 05 сентября 2018

Мне нужно создать массив объектов, значение свойств которых задается динамически на основе существующего массива объектов, который содержит ответ сервера.

Поток в этом коде мне кажется правильным (также согласно некоторым статьям в Интернете), но в результате я получаю массив из n пустых объектов (не отображается ни id: null).

infoForecasts = [];

buildWidget() {
    this.listForecasts.map( (i) => {
        const ser = this.utilitiesService;
        return this.infoForecasts.push(
            Object.create(
                {
                    id: null,
                    time: ser.getCurrTime(ser.getDateTime(i.dt))
                }
            )
        );
    });
}

Я также пытался:

...

time: Object.values(ser.getCurrTime(ser.getDateTime(i.dt))

но что-то изменилось.

Что я делаю не так?

1 Ответ

0 голосов
/ 05 сентября 2018

Метод map () создает новый массив с результатами вызова предоставленной функции для каждого элемента в вызывающем массиве.

Не следует использовать для зацикливания массива, используйте forEach () .

То, что я предлагаю вам сделать, это использовать reduce () , например:

this.listForecasts.reduce(
  (acc, cur) => [
    ...acc,
    {
      id: null,
      time: this.utilitiesService.getCurrTime(
        this.utilitiesService.getDateTime(cur.dt)
      )
    }
  ],
  []
);

однако, если вы только пытаетесь что-то толкать, тогда Array.push({ id: '', time: '' }) должно быть прекрасно!

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