我在將包含陣列的物件減少為簡單陣列時遇到問題。我有一個后端,它回傳一個狗串列及其價格。api 回傳資料的方式似乎很難使用,我正在努力將物件轉換為陣列。我試過變成一個陣列并減少它。
這是一個示例 - 我想轉換以下物件:
const a = {
dogs: [
{
"id": "dog1",
"priceRange": [
"low",
"high"
],
"vaccinated": true,
},
{
"id": "dog2",
"priceRange": [
"low",
"high"
],
"vaccinated": false,
}
],
"cost": [
{
"id": "low",
"cost": 200,
},
{
"id": "mid",
"cost": 400,
},
{
"id": "high",
"cost": 600,
}
]
};
進入這個陣列:
const reducedArray = [
{
"id": "dog1",
"priceRange": [
{
"id": "low",
"cost": 200,
},
{
"id": "high",
"cost": 600,
}
],
"vaccinated": true,
},
{
"id": "dog2",
"priceRange": [
{
"id": "low",
"cost": 200,
},
{
"id": "high",
"cost": 600,
}
],
"vaccinated": false,
}
]
我不確定
uj5u.com熱心網友回復:
您需要首先遍歷a.dogs陣列并在每次迭代中遍歷 priceRange 陣列并在陣列中找到其對應的值a.cost并回傳該值而不是字串低或高。
a.dogs.map(dog => ({
...dog,
priceRange: dog.priceRange.map(priceRange => a.cost.find(cost => cost.id === priceRange))
}))
uj5u.com熱心網友回復:
- 使用
Array#reduce,a.cost在更新 a 時迭代,Map其中鍵是id,值是物件 - 使用
Array#map,迭代a.dogs和設定priceRannge使用另一個從地圖專案Array#mapiteraion
const a = {
"dogs": [ { "id": "dog1", "priceRange": [ "low", "high" ], "vaccinated": true }, { "id": "dog2", "priceRange": [ "low", "high" ], "vaccinated": false } ],
"cost": [ { "id": "low", "cost": 200 }, { "id": "mid", "cost": 400 }, { "id": "high", "cost": 600 } ]
};
const costMap = a.cost.reduce((map, cost) =>
map.set(cost.id, cost)
, new Map);
const reducedArray = a.dogs.map(dog => ({
...dog,
priceRange: dog.priceRange.map(range => {
const { id, cost } = costMap.get(range) || {};
return { id, cost};
})
}));
console.log(reducedArray);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/367587.html
標籤:javascript 数组 降低
上一篇:找出2個大陣列之間的差異
