Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.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,我试图根据数组的元素id获取一个数组,数组的结构如下所示 {“数据”:[ { “id”:46, “名称”:“shsjks”, “描述”:“ehejej”, “代码”:“HSBSB”, “激活类型”:1, “详细信息”:“[{\'id\':413,\'name\':\'A\',{\'id\':416,\'name\':\'B\'”, }, { “id”:47, “名称”:“hhksns”, “描述”:“benemne”, “代码”:“gevewk”, “激活类型”:1, “详细信息:“[{\'id

我试图根据数组的元素id获取一个数组,数组的结构如下所示

{“数据”:[
{
“id”:46,
“名称”:“shsjks”,
“描述”:“ehejej”,
“代码”:“HSBSB”,
“激活类型”:1,
“详细信息”:“[{\'id\':413,\'name\':\'A\',{\'id\':416,\'name\':\'B\'”,
},
{
“id”:47,
“名称”:“hhksns”,
“描述”:“benemne”,
“代码”:“gevewk”,
“激活类型”:1,
“详细信息:“[{\'id\':419,\'name\':\'C\',{\'id\':423,\'name\':\'D\'”
},
]}
我试图根据细节id和我所做的事情来获取数据

让arr=a.data.filter(x=>{
返回(JSON.parse(x.detail).filter(x=>x.id==419))
});
//返回数组的所有元素,而不是第一个元素
我要退货

// filter where id 419
{
  "id": 47,
  "name": "shjks",
  "detail": "[{\"id\": 419, \"name\": \"C\"}, {\"id\": 423, \"name\": \"D\"}]"
  ....
}

.filter
不会执行映射。其回调函数的返回值应该只是指示是否应该包含数组元素(来自顶级数组)。因此,当不希望包含数组时,应该返回一个falsy值。As
。有些
返回布尔值,这是用于此目的的最佳候选方法。如果只需要一个匹配项,则
.find
更合适。filter

代码:HSBSB,激活类型:1,细节:1,细节:1,细节:1,细节:1,细节:“[{“id\:id”:1,细节:“[{“id\”:413,”细节:1,细节::“[{“id\”:413,名名名名:让一名名名:让一名名名:46,46,“id”姓名:46,“SSSSSSSSSSSSSSSSSSSSSSSSSJJJJJJJJJJJJJJJJJJJJ”,“代码”,“代码:HSBSB”,“激活B”,“激活型;激活。激活类型:1,激活类型:1,激活类型:1,1,1,1,1,1,1,1,细节:1,细节:1,细节:1,细节:1,细节:1,细节:1,细节::“““““““““““““““““““““,:::]} 让result=a.data.find(x=>JSON.parse(x.detail).some(x=>x.id==419));
控制台日志(结果)您应该这样做

let arr = a.data.filter(x => {
    return (JSON.parse(x.detail).filter(x => x.id === 419).length)
});

如果不存在值,Array.filter将返回
[]
。因此,当您返回数组本身时,它永远不会被视为false。

代码中的问题是,第一个过滤器需要返回布尔值(过滤或不过滤)

这将适用于美国:

const测试={
数据:[
{
id:46,
名称:'shsjks',
描述:“ehejej”,
代码:“HSBSB”,
激活类型:1,
详情:“[{“id”:413,“姓名”:“A”},{“id”:416,“姓名”:“B”}]”,
},
{
身份证号码:47,
名称:'hhksns',
描述:“贝尼姆”,
代码:“gevewk”,
激活类型:1,
详情:“[{“id”:419,“名称”:“C”},{“id”:423,“名称”:“D”}]”,
},
],
};
const arr=test.data.find((x)=>JSON.parse(x.detail);

log(JSON.stringify(arr,null,2))
您可能希望在第二个筛选器之后使用
.length>0
,或者将其替换为
。有些
如果需要数组的第一个元素,为什么要调用结果
arr
?它不会是一个数组,对吗?亚当·斯密-请使用查看下面的工作答案。或者您可以使用它:
let arr=a.data.filter(x=>JSON.parse(x.detail).filter(x=>x.id==419.length)我的坏,我会编辑我的问题我想返回整个数组(id,名称,描述,细节,…),但我得到了它的要点谢谢,相应地更新了我的答案。