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

use*_*544 1 javascript arrays object ecmascript-6

我有一个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"
  }
}
Run Code Online (Sandbox Code Playgroud)

我想删除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"
  }
}
Run Code Online (Sandbox Code Playgroud)

数据是动态的,所以我不知道将返回什么,它可能与我的条件匹配,或者它可能不匹配.

我已经尝试了很多方法但到目前为止似乎没有任何工作.我也可以使用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));


Run Code Online (Sandbox Code Playgroud)

Sno*_*now 6

你只需要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);
Run Code Online (Sandbox Code Playgroud)