#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. Черт, я чувствую себя глупо сейчас, просматривая решение, ха-ха, спасибо! 🙂