Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在对象数组中查找元素_Javascript_Arrays - Fatal编程技术网

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如果我的答案有助于澄清问题,请接受我的答案