Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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 迭代嵌套数组以匹配ID_Javascript_Arrays - Fatal编程技术网

Javascript 迭代嵌套数组以匹配ID

Javascript 迭代嵌套数组以匹配ID,javascript,arrays,Javascript,Arrays,我有一组数据是嵌套数组,这些数组可能是空的,或者它们实际上可能包含一个ID,如果其中一个数组ID与我比较的ID匹配,我想获取该数组中匹配的所有数据,并将其分配给要使用的变量 例如: 数据=[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]类型为“事件”、“成员” id=123 匹配阵列= 对于(var i=0;iobj.id==id

我有一组数据是嵌套数组,这些数组可能是空的,或者它们实际上可能包含一个ID,如果其中一个数组ID与我比较的ID匹配,我想获取该数组中匹配的所有数据,并将其分配给要使用的变量

例如:

数据=[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]类型为“事件”、“成员”
id=123
匹配阵列=
对于(var i=0;i
您可以使用方法过滤内部数组,并使用方法将过滤后的数组连接成一个数组

让数据=[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]id:“123”、“姓名”:“DARES HOUSE 2019”、“startDate”:null,“endDate”:null,“country”:null,“city”:null,“type:“Event”,“members”:null}]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[];
设id=123;
让matchedaray=data.flatMap(arr=>arr.filter(obj=>obj.id==id))

console.log(matchedArray)
您可以通过组合使用
.map
.filter
.flat

var数据=[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]id:“123”、“姓名”:“DARES HOUSE 2019”、“startDate”:null,“endDate”:null,“country”:null,“city”:null,“type:“Event”,“members”:null}]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]
var-id=123;
var matchedaray=data.map(arr=>{
返回arr.filter(x=>x.id==id);
}).flat();
控制台日志(匹配阵列)
我建议使用而不是
.filter
/
.map
/
.flatMap
。主要的好处是,它允许在找到元素时停止遍历数组

在具有大量数据的大型阵列上,它将更加高效(≈快50倍):

const data=[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]id:“123”、“姓名”:“DARES HOUSE 2019”、“startDate”:空,“endDate”:空,“country”:空,“city”:空,“type:“Event”,“members”:空}],[],[],[],[],[],[],[],[],[],[],[]
常数id=123;
让matchedaray=null;
数据部分((a)=>{
返回a.some((v)=>{
如果(v!=null&&v.id==id){
匹配阵列=a;
返回true;
}
});
});

控制台日志(匹配阵列)使用
Array#filter
oooh
flatMap
以前没有发现过。美好的太神了我喜欢stackoverflow,因为这个原因,快速、准确的建议,我会确保我在实际使用之前完全理解这些方法。谢谢。匹配的数组返回空-我没有得到一个包含任何数据的数组。这是我的错,我在比较一个不存在的ID,这就是原因。我道歉。