获取键值在 JavaScript 中的对象数据
Getting object data with key value in JavaScript
我有一个这样的对象:
{
"idMeal": "52795",
"strMeal": "Chicken Handi",
"strDrinkAlternate": null,
"strCategory": "Chicken",
"strArea": "Indian"
}
我正在尝试使用“idMeal”的值获取其他项目(即 strMeal 和 strCategory)的值。我该怎么做?
据我了解,您想过滤食物对象列表,只需将它们放入数组中并像这样过滤:
[obj1, obj2, obj3].filter(o => o.idMeal="52795")
首先你应该说明你尝试了什么。然后,你可以使用一个简单的条件:
let cat;
let area;
if (obj.idMeal === myValue) {
cat = obj.strCategory;
area = obj.strArea;
}
有更多方法可以做到这一点。看看 .map()
、.filter()
,但那些是针对数组的。
实现这一点最简单的方法是根据键值对过滤数据,然后将请求的字段缩减为一个新对象。
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);
我有一个这样的对象:
{
"idMeal": "52795",
"strMeal": "Chicken Handi",
"strDrinkAlternate": null,
"strCategory": "Chicken",
"strArea": "Indian"
}
我正在尝试使用“idMeal”的值获取其他项目(即 strMeal 和 strCategory)的值。我该怎么做?
据我了解,您想过滤食物对象列表,只需将它们放入数组中并像这样过滤:
[obj1, obj2, obj3].filter(o => o.idMeal="52795")
首先你应该说明你尝试了什么。然后,你可以使用一个简单的条件:
let cat;
let area;
if (obj.idMeal === myValue) {
cat = obj.strCategory;
area = obj.strArea;
}
有更多方法可以做到这一点。看看 .map()
、.filter()
,但那些是针对数组的。
实现这一点最简单的方法是根据键值对过滤数据,然后将请求的字段缩减为一个新对象。
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);