Нужно получить значения определенного ключа из массива объектов и собрать их в новом массиве JS

Рейтинг: 0Ответов: 3Опубликовано: 06.06.2023

Требуется помощь =) Не могу разобраться. Получаю массив объектов после POST запроса (ниже пример) :

{
  "items": [{
    "encodedId": "1:0JPQqdGM0JNWCdCzf2Jt0LHQotGV0ZUh0ZbRlBXCt0Je0JHQruKAnDcUXkZQ0YvQscKnehLRnNC1KtGK0Ll9BWLigLo/HXXCrhw=",
    "influence": 700.0,
    "similarCount": 3
  }, {
    "encodedId": "1:fmYoHEjQrRbQhz3RiUtm4oCh0JLRmtCLIyU10IzigqzRgGjQmCoR0JFg0YRhwrVzN9CxDUM50KcpdTbRiNCLwpjRkuKAphXRkVxh0JU50K5uWdC50L7RjX0C0KwQRsKp",
    "influence": 607.0,
    "similarCount": 8
  }],
  "mappings": [{
    "inn": "7710137066",
    "entityIds": [534868]
  }]
}

После чего нужно сделать из этого объект с массивом(ниже пример), где я получаю значения каждого ключа encodedId и кладу их в массив ids :

{
  "ids": [ "1:0JPQqdGM0JNWCdCzf2Jt0LHQotGV0ZUh0ZbRlBXCt0Je0JHQruKAnDcUXkZQ0YvQscKnehLRnNC1KtGK0Ll9BWLigLo/HXXCrhw=",
"1:fmYoHEjQrRbQhz3RiUtm4oCh0JLRmtCLIyU10IzigqzRgGjQmCoR0JFg0YRhwrVzN9CxDUM50KcpdTbRiNCLwpjRkuKAphXRkVxh0JU50K5uWdC50L7RjX0C0KwQRsKp",
  ]
}

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

мой вариант :

      const objOfIds = objectSearch.reduce(
        (acc, { encodedId }) => {
          return {
            ids: [...acc.encodedId, encodedId],
          };
        },
        { ids: [] }
      );
      console.log(objOfIds);

Ответы

▲ 0

const data = {
  "items": [{
    "encodedId": "1:0JPQqdGM0JNWCdCzf2Jt0LHQotGV0ZUh0ZbRlBXCt0Je0JHQruKAnDcUXkZQ0YvQscKnehLRnNC1KtGK0Ll9BWLigLo/HXXCrhw=",
    "influence": 700.0,
    "similarCount": 3
  }, {
    "encodedId": "1:fmYoHEjQrRbQhz3RiUtm4oCh0JLRmtCLIyU10IzigqzRgGjQmCoR0JFg0YRhwrVzN9CxDUM50KcpdTbRiNCLwpjRkuKAphXRkVxh0JU50K5uWdC50L7RjX0C0KwQRsKp",
    "influence": 607.0,
    "similarCount": 8
  }],
  "mappings": [{
    "inn": "7710137066",
    "entityIds": [534868]
  }]
};

const data1 = data.items.reduce((acc, {encodedId}) => {
   acc['ids'].push(encodedId);
  return acc;
}, {ids:[]});

console.log(data1)

▲ 0

Предлагаю воспользоваться другим методом массива. Поскольку тут все явно прослеживается... Вместо объекта будет значение его свойства.

const data = {
  "items": [{
    "encodedId": "1:0JPQqdGM0JNWCdCzf2Jt0LHQotGV0ZUh0ZbRlBXCt0Je0JHQruKAnDcUXkZQ0YvQscKnehLRnNC1KtGK0Ll9BWLigLo/HXXCrhw=",
    "influence": 700.0,
    "similarCount": 3
  }, {
    "encodedId": "1:fmYoHEjQrRbQhz3RiUtm4oCh0JLRmtCLIyU10IzigqzRgGjQmCoR0JFg0YRhwrVzN9CxDUM50KcpdTbRiNCLwpjRkuKAphXRkVxh0JU50K5uWdC50L7RjX0C0KwQRsKp",
    "influence": 607.0,
    "similarCount": 8
  }],
  "mappings": [{
    "inn": "7710137066",
    "entityIds": [534868]
  }]
};
const objOfIds = { ids: data.items.map(o => o.encodedId) }
console.log(objOfIds)

▲ -1

У вас 2 банальные ошибки:

  1. Вам нужен не сам объект objectSearch, а его ключ items, т.е. objectSearch.items

  2. Внутри reduce вам нужен массив ids, а не encodedId, потому что в начальном значении acc у вас {ids:[]}, а не {encodedId:[]}

    const data = {
      "items": [{
        "encodedId": "1:0JPQqdGM0JNWCdCzf2Jt0LHQotGV0ZUh0ZbRlBXCt0Je0JHQruKAnDcUXkZQ0YvQscKnehLRnNC1KtGK0Ll9BWLigLo/HXXCrhw=",
        "influence": 700.0,
        "similarCount": 3
      }, {
        "encodedId": "1:fmYoHEjQrRbQhz3RiUtm4oCh0JLRmtCLIyU10IzigqzRgGjQmCoR0JFg0YRhwrVzN9CxDUM50KcpdTbRiNCLwpjRkuKAphXRkVxh0JU50K5uWdC50L7RjX0C0KwQRsKp",
        "influence": 607.0,
        "similarCount": 8
      }],
      "mappings": [{
        "inn": "7710137066",
        "entityIds": [534868]
      }]
    };
    
    const objOfIds = data.items.reduce((acc, { encodedId }) => {
      return {
        ids: [...acc.ids, encodedId],
      };
    }, {
      ids: []
    });
    
    console.log(objOfIds);

Чутка краткий вариант:

const data = {
  "items": [{
    "encodedId": "1:0JPQqdGM0JNWCdCzf2Jt0LHQotGV0ZUh0ZbRlBXCt0Je0JHQruKAnDcUXkZQ0YvQscKnehLRnNC1KtGK0Ll9BWLigLo/HXXCrhw=",
    "influence": 700.0,
    "similarCount": 3
  }, {
    "encodedId": "1:fmYoHEjQrRbQhz3RiUtm4oCh0JLRmtCLIyU10IzigqzRgGjQmCoR0JFg0YRhwrVzN9CxDUM50KcpdTbRiNCLwpjRkuKAphXRkVxh0JU50K5uWdC50L7RjX0C0KwQRsKp",
    "influence": 607.0,
    "similarCount": 8
  }],
  "mappings": [{
    "inn": "7710137066",
    "entityIds": [534868]
  }]
};

const objOfIds = data.items.reduce((acc, { encodedId }) => ({
  ids: [...acc.ids, encodedId]
}), {
  ids: []
});

console.log(objOfIds);