我有一個這樣的物件:
{
"idMeal": "52795",
"strMeal": "Chicken Handi",
"strDrinkAlternate": null,
"strCategory": "Chicken",
"strArea": "Indian"
}
我正在嘗試使用“idMeal”的值獲取其他專案(即 strMeal 和 strCategory)的值。我怎樣才能做到這一點?
uj5u.com熱心網友回復:
據我了解,您要過濾食物物件串列,只需將它們放入一個陣列中并像這樣過濾:
[obj1, obj2, obj3].filter(o => o.idMeal="52795")
uj5u.com熱心網友回復:
首先,您應該說明您嘗試過的內容。然后,您可以使用一個簡單的條件:
let cat;
let area;
if (obj.idMeal === myValue) {
cat = obj.strCategory;
area = obj.strArea;
}
有更多的方法可以做到這一點。看看.map(),.filter()但那些是用于陣列的。
uj5u.com熱心網友回復:
實作這一點的最簡單方法是根據鍵值對過濾資料,然后將請求的欄位縮減為一個新物件。
const mealData = [{
"idMeal": "52795",
"strMeal": "Chicken Handi",
"strDrinkAlternate": null,
"strCategory": "Chicken",
"strArea": "Indian",
}];
const filterAndMap = (data, key, value, fields) =>
data
.filter((record) => record[key] === value)
.map(record => fields.reduce((acc, field) =>
({ ...acc, [field]: record[field] }), {}));
const result = filterAndMap(mealData, 'idMeal', '52795', ['strMeal', 'strCategory']);
console.log(result);
或者,您可以傳遞過濾器函式和映射器函式:
const mealData = [{
"idMeal": "52795",
"strMeal": "Chicken Handi",
"strDrinkAlternate": null,
"strCategory": "Chicken",
"strArea": "Indian",
}];
const filterAndMap = (data, filterFn, mapperFn) =>
data.filter(filterFn).map(mapperFn);
const result = filterAndMap(
mealData,
({ idMeal }) => idMeal === '52795',
({ strMeal, strCategory }) => ({ strMeal, strCategory }));
console.log(result);
在上面的例子中,我們可以洗掉filterAndMap函式filter并map直接鏈接。
顯示代碼片段
const mealData = [{
"idMeal": "52795",
"strMeal": "Chicken Handi",
"strDrinkAlternate": null,
"strCategory": "Chicken",
"strArea": "Indian",
}];
const result = mealData
.filter(({ idMeal }) => idMeal === '52795')
.map(({ strMeal, strCategory }) => ({ strMeal, strCategory }));
console.log(result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/359695.html
標籤:javascript json 映射 过滤
