Функция Array.map не применяется к значению объекта - PullRequest
1 голос
/ 09 мая 2019

Я пытаюсь переназначить объект, полученный из вызова API. Формат ответа следующий:

data: {
    foo: [{
        id: "1",
        name: "joe",
        info: "whatever"
    }, {
        id: "2",
        name: "anna",
        info: "whatever"
    },...],
    bar: [...]
}

Код, который я использую для повторного сопоставления объекта внутри каждого массива ответов:

const DATA = response.data;
const entries = Object.entries(DATA);

for (const entry of entries) {
    entry[1].map(entry => ({
        id: entry["id"],
        mixed_info: entry["name"] + ", " + entry["info"]
    }));
}

Когда я консоль.log данные после этого, он показывает то же самое, что и первоначальный ответ, как если бы он полностью игнорировал функцию карты.

Что я делаю не так? Спасибо за внимание.

Ответы [ 4 ]

2 голосов
/ 09 мая 2019

map возвращает новый массив, вы игнорируете результат вызова.

1 голос
/ 09 мая 2019

Назначить результат вызова map:

entry[1] = entry[1].map(...);

Array.prototype.map возвращает новый массив - он не изменяет оригинал.

0 голосов
/ 09 мая 2019
    let result = {};
    for (const entry of entries) {
        result[entry[0]] = entry[1].map(entry => ({
            id: entry.id,
            mixed_info: `${entry["name"]  }, ${  entry["info"]}`,
        }));
    }

'результат' содержит точный переназначенный объект.

0 голосов
/ 09 мая 2019

Вы должны переназначить entry:

  entry[1] = entry[1].map(/*...*/);

Однако это будет отражено только в массиве внутри entries, оно не изменится DATA. Чтобы изменить это, вы должны либо превратить пары ключ-значение обратно в объект в конце:

  DATA = Object.fromEntries(entries);

Или вам нужно переназначить свойства DATA во время итерации:

   DATA[ entry[0] ] = entry[1].map(/*...*/);

Я бы сделал:

  const { data } = response;

  for(const [key, value] of Object.entries(data)) {
     data[key] = value.map(/*...*/);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...