删除基于ID和类型的嵌套数组对象?

旺卡

给定一组嵌套的进餐,我们尝试删除基于idmealType组合的嵌套对象我们从2个嵌breakfast套餐开始,如果都将其删除,则由于当前父键为空,因此我们尝试将其完全删除。

这是到目前为止的代码:

var mealsList = {
    "menuGroup1": [
    {
      "id": "b1",
      "menuId": "FRPUbgmMiaNH",
      "title": "Eggs",
      "mealType": "breakfast"
    }, {
      "id": "b2",
      "menuId": "FRPUbgmMiaNH",
      "title": "Sandwich",
      "mealType": "breakfast"
    }
  ],
  "menuGroup2": [
    {
      "id": "b2",
      "menuId": "FRPUbgmMiaNH",
      "title": "Fruits",
      "mealType": "snack"
    }
  ]
};

console.log(mealsList);

const removeItem = (id, mealType) => {
  // pseudocode
  // mealsList.*.where("id" == id && "mealType" == mealType).remove();
}

// Remove breakfast with id and meal_type
// removeItem(id, mealType)
removeItem('b1', 'breakfast');
console.log('removed b1 breakfast, mealsList should only contain b2 object');
console.log(mealsList);

removeItem('b2', 'breakfast');
console.log('removed b2 breakfast, mealsList should only contain menuGroup2, as menuGroup1 is now empty');
console.log(mealsList);

事情是,我们试图在removeItem不显式传递的情况下删除嵌套的餐对象menuGroupX,而是试图mealsList基于id定位嵌套对象mealType伪代码使用a*来表明这一点。

这些console.log陈述根据mealsList应在其下呈现的方式显示了预期的结果

我们正在寻找一种简短而甜蜜的东西,理想的情况是一根衬里,即使这意味着为了简单起见也使用了lodash解决方案。

这是小提琴 (“ JS中的代码”选项卡)

知道要放置什么来代替伪代码removeItemmealsList删除特定项吗?

缺口

这是一个纯JavaScript解决方案,它迭代的键mealsList,通过id过滤mealType,然后将结果数组的长度与0进行比较;如果为0,则从中删除密钥mealsList

var mealsList = {
  "menuGroup1": [{
    "id": "b1",
    "menuId": "FRPUbgmMiaNH",
    "title": "Eggs",
    "mealType": "breakfast"
  }, {
    "id": "b2",
    "menuId": "FRPUbgmMiaNH",
    "title": "Sandwich",
    "mealType": "breakfast"
  }],
  "menuGroup2": [{
    "id": "b2",
    "menuId": "FRPUbgmMiaNH",
    "title": "Fruits",
    "mealType": "snack"
  }]
};

console.log(mealsList);

const removeItem = (id, mealType) => {
  Object.keys(mealsList).forEach(k => (mealsList[k] = mealsList[k].filter(m => m.id != id || m.mealType != mealType)).length == 0 && delete mealsList[k]);
}

// Remove breakfast with id and meal_type
// removeItem(id, mealType)
removeItem('b1', 'breakfast');
console.log('removed b1 breakfast, mealsList should only contain b2 object');
console.log(mealsList);

removeItem('b2', 'breakfast');
console.log('removed b2 breakfast, mealsList should only contain menuGroup2, as menuGroup1 is now empty');
console.log(mealsList);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章