javascript - 从对象中删除深层项目
问题描述
我正在寻找删除recipeStep
驻留在等于的封装对象heat
。因此,其中的第一个数组项recipeMealSteps
将被删除,因为它包含heat
.
我试过使用.map
and .filter
,但我没有得到整个对象减去heat
步骤。
到目前为止,这是我失败的结果:
let filteredRecipes = meals.map((m) =>
m.mealTypeRecipes.map((r) => r.recipeMealSteps.filter((s) => s.recipeStep !== 'heat'))
);
let meals = [
{
mealId: 0,
mealDescription: "Favourties",
mealTypeRecipes: [
{
recipeAuthor: "Frank Doe",
recipeDescription: "Great chicken dish for those that don't eat chicken",
recipeID: 0,
recipeMealSteps: [
{
recipeDesc: "Heat up the oven",
recipeStep: "heat",
},
{
recipeDesc: "Allow it to cook",
recipeStep: "cool",
},
{
recipeDesc: "Take it out the oven",
recipeStep: "out",
},
],
},
{
recipeID: 1,
recipeName: "Fish Dish",
recipeMealSteps: [
{
recipeDesc: "Heat up the oven",
recipeStep: "heat",
},
{
recipeDesc: "Allow it to cook",
recipeStep: "cool",
},
{
recipeDesc: "Take it out the oven",
recipeStep: "out",
},
],
},
],
},
];
解决方案
let filteredRecipes = meals.map(({mealTypeRecipes, ...m}) => ({
...m,
mealTypeRecipes: mealTypeRecipes.map(({recipeMealSteps,...r}) => ({
...r,
recipeMealSteps: recipeMealSteps.filter((s) => s.recipeStep !== 'heat')
})
)}));
编辑:
解释:在第一个地图中,我们将每个餐点作为回调函数的参数。我们解构它,使“m”是一个具有所有属性“mealTypeRecipes”的对象(在这种情况下,m 具有属性“meadId”和“mealDescription”)。另一方面,我们将属性“mealTypeRecipes”的值放入变量“mealTypeRecipes”中。这要归功于扩展运算符“...”。这将是等效的
let filteredRecipes = meals.map((mealItem) => {
const {mealTypeRecipes, ...m} = mealItem
然后我们返回重建的对象,返回属性“mealTypeRecipes”的新值,并将它与我们没有修改的对象部分“...m”放在一起。这会创建旧对象的副本,确保不变性。
一个更详细的方法是这样的
let filteredRecipes = meals.map((meal) => {
const {mealTypeRecipes, ...m} = meal;
return {
...m,
mealTypeRecipes: mealTypeRecipes.map((mealTypeRecipeItem) => {
const {recipeMealSteps,...r} = mealTypeRecipeItem;
return {
...r,
recipeMealSteps: recipeMealSteps.filter((s) => s.recipeStep !== 'heat')
}
})
}
});
推荐阅读
- docker - SKK 用于假名到汉字的逆变器
- reactjs - Target component/view that is not child
- format - How to use fmt:formatNumber with 2 decimal
- python - Finding Euclidean Distance in python
- c# - Link two tables to the grid view c#
- .net - ODP Oracle managed Client - ORA-01017: invalid username/password; logon denied
- python - 如何在 python-selenium 中获取元素的“状态”?
- sql - CTE 与 LIKE statemnet 结合
- xml - 使用元素名称将输入 XML 传递给 XSLT 中的变量
- r - 从 cpglmm 解释输出和预测