繁体   English   中英

JS如何在forEach循环中从数组中删除对象?

[英]JS How to remove an object from array in a forEach loop?

我有一个具有以下内容的data对象:

{
  "content": {
    "id": "someID",
    "type": "unit",
    "method": "xyz",
    "blocks": [{
      "key": "blue",
      "data": [
        "Array"
      ]
    }, {
      "key": "red",
      "data": [
        "Array"
      ]
    }, {
      "key": "yellow",
      "data": [
        "Array"
      ]
    }, {
      "key": "black",
      "data": [
        "Array"
      ]
    }],
    "notes": "abc"
  }
}

我想删除block具有关键yellow ,通过遍历blocks ,数据的其余部分应保留原样。 所以预期的最终结果将是

{
  "content": {
    "id": "someID",
    "type": "unit",
    "method": "xyz",
    "blocks": [{
      "key": "blue",
      "data": [
        "Array"
      ]
    }, {
      "key": "red",
      "data": [
        "Array"
      ]
    }, {
      "key": "black",
      "data": [
        "Array"
      ]
    }],
    "notes": "abc"
  }
}

数据是动态的,所以我不知道会返回什么,它可能符合我的条件,也可能不匹配。

我尝试了很多方法,但到目前为止似乎没有任何效果。 我也可以使用lodash如果更简单的话)。 这些似乎都不起作用。 任何帮助/方向表示赞赏

1. Using **delete**

const deleteUnwantedBlock = contentObj => {
  const updatedData = contentObj;
  const blocks = _.get(updatedData, 'blocks', []);

  blocks.forEach(block => {
    if (block.key.includes('yellow')) {
      delete updatedData.block;
    }
  });
  return updatedData;
};

console.log(deleteUnwantedBlock(data.content));```



2. Using rest operator:

    const deleteUnwantedBlock = contentObj => {
      const blocks = _.get(contentObj, 'blocks', []);
      blocks.forEach(block => {
        if (block.key.includes('yellow')) {
          let { block, ...restOfTheData } = updatedData;
        }
        return { ...updatedEntry };
      });
    };

    console.log(deleteUnwantedBlock(data.content));


您只需要filter

 const obj = { "content": { "id": "someID", "type": "unit", "method": "xyz", "blocks": [{ "key": "blue", "data": [ "Array" ] }, { "key": "red", "data": [ "Array" ] }, { "key": "yellow", "data": [ "Array" ] }, { "key": "black", "data": [ "Array" ] }], "notes": "abc" } }; obj.content.blocks = obj.content.blocks.filter(({ key }) => key !== 'yellow'); console.log(obj); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM