我有一个对象数组,并对其进行过滤:
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
}
]
我真的放弃了。请帮助。
添加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;
}
});
``
也许您可以尝试复制对象测试使用(..您的对象)或array.splice(索引,元素数量,元素,元素)或slice()祝您好运