Отделить объект в массиве объектов

#arrays #object #key-value

#массивы #объект #ключ-значение

Вопрос:

Я использую данные из API

 "stats": [
{
  "base_stat": 48,
  "effort": 1,
  "stat": {
    "name": "hp",
    "url": "https://pokeapi.co/api/v2/stat/1/"
  }
},
{
  "base_stat": 48,
  "effort": 0,
  "stat": {
    "name": "attack",
    "url": "https://pokeapi.co/api/v2/stat/2/"
  }
}]
 

Поэтому, когда я получаю это, я делаю =>

 const selectedStats = stats.reduce(
(acc, stat) => ({ ...acc, [stat.stat.name]: stat.base_stat }),
{} ); 
    // OUTPUT => stats: {
attack: 48
hp: 48 }
 

Но теперь я пытаюсь отделить объект в массиве объектов, например

 [{attack: 81}, {hp: 48}, etc]
 

но я не знаю, как это сделать

Извините, если это большой вопрос, но я не понимаю, как его решить. Спасибо!

Ответ №1:

Просто сопоставление результата Object.entries() сделает это:

 const stats = {
  attack: 48,
  hp: 48
};

const data = Object.entries(stats).map(([k, v]) => ({[k]: v}));

console.log(data); 

Однако промежуточное звено вам не нужно reduce() . Поскольку вы начинаете с массива, вы можете сделать все за одну map() операцию:

 const stats = [{
  "base_stat": 48,
  "effort": 1,
  "stat": {
    "name": "hp",
    "url": "https://pokeapi.co/api/v2/stat/1/"
  }
}, {
  "base_stat": 48,
  "effort": 0,
  "stat": {
    "name": "attack",
    "url": "https://pokeapi.co/api/v2/stat/2/"
  }
}];

const data = stats.map(({base_stat, stat: {name}}) => ({[name]: base_stat}));

console.log(data); 

Комментарии:

1. Черт, я чувствую себя глупо сейчас, просматривая решение, ха-ха, спасибо! 🙂