从具有过滤条件的对象数组中删除具有特定键值的对象

问题描述 投票:0回答:2

我有一个对象数组,并对其进行过滤:

const test = [
  {
    "id":2,
    "category_id":1,
    "features":["blah","blah","blah","blah"],
    "options":
    {
      "option1":
        {
          "b":22,"c":105,"d":70,"e":345
        },
      "option2":
        {
          "c":25,"c":41,"d":70,"e":345
        }
    }
  },
  {
    "id":4,
    "category_id":2,
    "features":["blah","blah","blah","blah"],
    "options":
    {
      "option1":
        {
          "b":22,"c":105,"d":70,"e":345
        },
      "option2":
        {
          "c":25,"c":41,"d":70,"e":345
        }
    }
  },
  {
    "id":7,
    "category_id":4,
    "features":null,
    "options":null
  },
  {
    "id":11,
    "category_id":6,
    "features":["blah","blah","blah","blah"],
    "options":
    {
      "option1":
        {
          "b":22,"c":105,"d":70,"e":345
        },
      "option2":
        {
          "c":25,"c":41,"d":70,"e":345
        }
    }
  }
]


const filtered = test.filter((t) => {


})

具有“ category_id:4”的对象没有“选项”,但是在filter中,我需要存在的所有选项值:

const filtered = test.filter((t) => {
  const tOptions = Object.values(t.options)

})

它给我一个错误,因为某些选项不存在。我知道如何修改数组和删除不带选项的对象(使用Lodash)

_.reject(test, function(el) { return el.category_id === 4 })

但是由于后面的逻辑,我无法修改“ test”数组。不知何故,我需要这个结果而不接触数组本身:

[
 Object 
 {
  b:22,
  c:105,
  d:70,
  e:345
 }, 
Object 
 {
  c:41,
  d: 70,
  e: 345
 }
]

我真的放弃了。请帮助。

javascript arrays object filtering
2个回答
0
投票

添加if条件以检查t.options是否不为空

const filtered = test.filter((t) => {
  if(t.options) { // null and undefined are falsey
     const tOptions = Object.values(t.options);

  } else {
      return false;
  }
});
``


0
投票

也许您可以尝试复制对象测试使用(..您的对象)或array.splice(索引,元素数量,元素,元素)或slice()祝您好运

© www.soinside.com 2019 - 2024. All rights reserved.