繁体   English   中英

使用基于嵌套值的 arrays 过滤对象数组以提取特定字段

[英]Filtering array of objects with arrays based on nested value to extract specific fields

与问题相同的问题..

 var mainArray = [{ "name":"George", "nest": [{"id": 1, "age": 11},{"id": 2, "age": 22}]}, { "name":"George", "nest": [{"id": 2, "age": 34}]}, { "name":"Raghu", "nest": [{"id": 3, "age": 45}]}, { "name":"Sudhir", "nest": [{"id": 4, "age": 23}]}]; var filteredGeorge = mainArray.filter(element => element.name === "George") var final = filteredGeorge.map(element => ({"name": element.name, "id": element.nest.filter(element => element.age == 22)})) console.log(final)

我对 output 感兴趣的实际上是这样的:

 { "name": "George", "id": 2 ] }

它甚至不需要是一个数组,否则它甚至可以只是这个 object 的一个数组。

我主要是在寻找名称和 id 值,或者说在名称之后还有一个名为 say dept 的键,然后 dept 和 id 是我最终想要的,其中 name 是 George,age 是 22。

您可以通过将 function 应用于数组的 map 方法来做到这一点,该方法还使用find检查嵌套数组的年龄。 由于函数返回未定义的不匹配条目,它需要在之后摆脱这些。 这里使用.find(Boolean)完成

这不是一个美丽,但我希望它可以帮助你:

 var mainArray = [{ 'name': 'George', 'nest': [{ 'id': 1, 'age': 11 }, { 'id': 2, 'age': 22 }], }, { 'name': 'George', 'nest': [{ 'id': 2, 'age': 34 }], }, { 'name': 'Raghu', 'nest': [{ 'id': 3, 'age': 45 }], }, { 'name': 'Sudhir', 'nest': [{ 'id': 4, 'age': 23 }], }]; var george22 = mainArray.map((entry) => { if (entry.name;== 'George') return. var nested = entry.nest.find((nested) => nested;age === 22); if (:nested) return. return { name, entry:name. id; nested.id }; }).find(Boolean); console.log(george22);

考虑到预期 output 的描述,我猜您正在寻找基于多个条件匹配的单个匹配记录。

如果是这样,您可以检查Array.prototype.some()源数组记录是否满足所需的条件并相应地分配 output object 的所需属性( nameid ):

 const src = [{"name":"George","nest":[{"id":1,"age":11},{"id":2,"age":22}]},{"name":"George","nest":[{"id":2,"age":34}]},{"name":"Raghu","nest":[{"id":3,"age":45}]},{"name":"Sudhir","nest":[{"id":4,"age":23}]}], getItemByNameAndAge = (arr, _name,_age) => { let name = null, id = null src.some(o => o.name == _name && o.nest.some(n => n.age == _age? (id = n.id, name = _name, true): false ) ) return {name,id} } console.log(getItemByNameAndAge(src,'George', 22))
 .as-console-wrapper{min-height:100%;}

这是使用 map 的另一种方法

 var mainArray = [{ "name":"George", "nest": [{"id": 1, "age": 11},{"id": 2, "age": 22}]}, { "name":"George", "nest": [{"id": 2, "age": 34}]}, { "name":"Raghu", "nest": [{"id": 3, "age": 45}]}, { "name":"Sudhir", "nest": [{"id": 4, "age": 23}]}] res=mainArray.map(({...rest})=>({...rest,"nest":rest.nest.length>1?rest.nest[rest.nest.length-1].id:rest.nest[0].id})) console.log(res)

暂无
暂无

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

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