繁体   English   中英

如何通过过滤嵌套属性返回父对象

[英]How to return parent object by filtering nested property

我正在尝试使用嵌套对象过滤数组,但是在对子属性进行过滤时不会返回父对象。

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
})

header.po_no与字符串匹配时,我想返回整个item

我不确定如何调试它,因为当返回条件评估为true时,它不会返回任何值。

预期产量:

[{
  "header": {
    "po_no": "P.O. Number"
  },
  "line": line
}]

当使用过滤器匹配子属性时,如何返回整个数组索引?

.filter返回一个新的数组; 它不会修改数组。 因此,如果您期望data具有该输出,则不会。 但是,这将:

const expectedItems = data.filter(item => { 
  return item.header.po_no === 'P.O. Number' // Evaluates to true
});

您的代码中有'引用类型。 过滤后的数据保存到变量。

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
})

Array.filter与箭头功能一起使用将以最简洁的方式解决此问题。 filter返回主数组和过滤后的项,而find只会返回匹配的特定项。

 let line = "xyz"; let data = [{ "header": { "po_no": "PO Number" }, line }, { "header": { "po_no": "Another PO Number" }, line } ]; let filter = data.filter(d => d.header.po_no === 'PO Number') // return arr let find = data.find(d => d.header.po_no === 'PO 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
  }

暂无
暂无

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

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