遍历嵌套数组以匹配ID

3
我有一组嵌套数组的数据,这些数组可能为空,也可能包含一个ID。如果其中一个数组的ID与我正在比较的ID匹配,我想获取所有匹配的数组中的数据,并将其分配给一个变量以供使用...
例如:

data = [[],[],[],[],[],[],[],[],[{"id":"123","name":"DARES HOUSE 2019","startDate":null,"endDate":null,"country":null,"city":null,"type":"Event","members":null}],[],[],[],[],[],[],[],[],[],[],[]]

id = 123

matchedArray =
  for (var i = 0; i < potentialEvents.length; i++) {
    for (var j = 0; j < potentialEvents[i].length; j++) {

      if (id === potentialEvents[i].id) {
        return;
      }
    }
  }
console.log(matchedArray)

我正在尝试让matchedArray成为具有匹配ID的数组!如果您能帮助,非常感谢!最初的回答:

2
使用Array#filter - Pranav C Balan
3个回答

3
您可以通过结合使用 .map .filter .flat 来实现此操作。

var data = [[],[],[],[],[],[],[],[],[{"id":"123","name":"DARES HOUSE 2019","startDate":null,"endDate":null,"country":null,"city":null,"type":"Event","members":null}],[],[],[],[],[],[],[],[],[],[],[]]

var id = 123;

var matchedArray = data.map( arr => {
   return arr.filter(x => x.id == id);
}).flat();

console.log(matchedArray);


2
您可以使用Array#filter方法来过滤内部数组,然后使用Array#flatMap方法将过滤后的数组连接成一个。

let data = [[],[],[],[],[],[],[],[],[{"id":"123","name":"DARES HOUSE 2019","startDate":null,"endDate":null,"country":null,"city":null,"type":"Event","members":null}],[],[],[],[],[],[],[],[],[],[],[]];
let id = 123;

let matchedArray = data.flatMap(arr => arr.filter(obj => obj.id == id))
console.log(matchedArray)


1
哇,之前没注意到flatMap。太棒了! - Jamiec
1
太棒了!我喜欢stackoverflow,因为它提供快速准确的建议。不过在实际使用方法之前,我会确保充分理解它们。谢谢。 - Sparlarva
匹配的数组返回为空 - 我得不到任何数据的数组。 - Sparlarva
1
这是我的错,我比较了一个不存在的ID,因此向您道歉。 - Sparlarva

1

我建议使用.some而不是.filter/.map/.flatMap。主要好处是它允许在找到元素时停止遍历数组。

在具有大量数据的大型数组上,它将更有效率(≈50倍快):jsperf测试

const data = [[],[],[],[],[],[],[],[],[{"id":"123","name":"DARES HOUSE 2019","startDate":null,"endDate":null,"country":null,"city":null,"type":"Event","members":null}],[],[],[],[],[],[],[],[],[],[],[]]

const id = 123;
let matchedArray = null;

data.some((a) => {
  return a.some((v) => {
    if (v != null && v.id == id) {
      matchedArray = a;
      return true;
    }
  });
});

console.log(matchedArray);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接