我正在尝试使用嵌套对象过滤数组,但是在对子属性进行过滤时不会返回父对象。
let line = "xyz";
let data = [
{
"header": {
"po_no": "P.O. Number"
},
"line": line
},
{
"header": {
"po_no": "Another P.O. Number"
},
"line": line
}
];
...
data.filter(item => {
return item.header.po_no === 'P.O. Number' // Evaluates to true
})
当它的item
与字符串匹配时,我想返回整个header.po_no
。
我不确定如何调试它,因为当返回条件为true时,它不会返回任何值。
预期输出:
[{
"header": {
"po_no": "P.O. Number"
},
"line": line
}]
当使用过滤器匹配子属性时,如何返回整个数组索引?
答案 0 :(得分:1)
.filter
返回一个 new 数组;它不会修改数组。因此,如果您期望data
具有该输出,则不会。但是,这将:
const expectedItems = data.filter(item => {
return item.header.po_no === 'P.O. Number' // Evaluates to true
});
答案 1 :(得分:0)
您在代码中输入了'引用类型。 过滤后的数据保存到变量中。
let line = "xyz";
let data = [
{
"header": {
"po_no": "P.O. Number"
},
"line": line
},
{
"header": {
"po_no": "Another P.O. Number"
},
"line": line
}
];
const filtered = data.filter(item => {
return item.header.po_no === 'P.O. Number' // Evaluates to true
})
答案 2 :(得分:0)
将Array.filter与箭头功能配合使用将以最简洁的方式解决此问题。 filter
返回主数组和过滤后的项目,其中find
仅返回匹配的特定项目。
let line = "xyz";
let data = [{
"header": { "po_no": "P.O. Number" },
line
},
{
"header": { "po_no": "Another P.O. Number" },
line
}
];
let filter = data.filter(d => d.header.po_no === 'P.O. Number') // return arr
let find = data.find(d => d.header.po_no === 'P.O. Number') // return just the item
console.log(filter)
console.log(find)
在处理箭头函数时,如果您有直接收益,则无需打开函数括号……只需做以下事情:
data.filter(d => d.header.po_no === 'P.O. Number') // <-- no { return ... }
还要注意,由于您的属性称为line
,因此您可以简单地将对象定义为:
{
"header": { "po_no": "Another P.O. Number" },
line // <-- same prop name as your variable name
}