Javascript 在对象数组中查找元素
数组看起来是这样的:Javascript 在对象数组中查找元素,javascript,arrays,Javascript,Arrays,数组看起来是这样的: var arr = [{name: '1112B', subname: [ {name: 'sub_1112B'}, {name: 'sub_1112BA'} ] }, {name: '2112B', subname: [ {name: 'sub_2112B'}, {name: 'sub_2112BA'} ] }]; 执行以下代码后: arr.map(it=>it.subname).fi
var arr =
[{name: '1112B',
subname:
[
{name: 'sub_1112B'},
{name: 'sub_1112BA'}
]
},
{name: '2112B',
subname:
[
{name: 'sub_2112B'},
{name: 'sub_2112BA'}
]
}];
执行以下代码后:
arr.map(it=>it.subname).find(i=>i.name=='sub_2112BA')
i没有定义,但应该是'2112B'
我做错了什么?在
find()
中使用类型安全的equal
arr.map(it=>it.subname)
将创建子名称的嵌套数组,并且使用.find()将返回未定义的
,因为它会迭代嵌套数组,所以可以使用.flat()
然后在之后使用find
,但它不会返回包含subname
的对象,因为您正在subname
数组中迭代,因此您可以过滤数组的对象,并在每个子名称数组上使用find来检查是否存在所需的名称
arr=
[{名称:'1112B',
子名称:
[
{name:'sub_1112B'},
{name:'sub_1112BA'}
]
},
{名称:'2112B',
子名称:
[
{name:'sub_2112B'},
{name:'sub_2112BA'}
]
}];
res=arr.filter(x=>(x.subname.find(y=>y.name==“sub_2112B”))
console.log(res)
此外,您将不会找到要查找的字符串,而是找到包含该字符串的对象。如果要将包含搜索的对象作为子字符串获取,则不应包含映射调用。测试字符串sub2112BA
不存在于数据中。sub_2112BA存在于名称中:“2112B”Array.prototype.filter
返回一个数组,并且它将在整个数组中循环。如果你真的对第一次出现感兴趣,可以选择x.find(d=>!!d.subname.find(i=>i.name==“sub_2112BA”)
@ENG1959如果我的答案有助于澄清问题,请接受我的答案