在嵌套数组中查找项目的索引

时间:2019-07-02 00:54:27

标签: javascript

如果我有一个数组(sub),该数组具有自己的对象,每个对象中都有数组,并且我正在寻找id === 9之类的特定值,我将如何找到对象的索引和索引在那个对象的数组中?

Set rngPasted = Selection
SortGreen = Intersect(Columns(3), Selection.Rows(1)).Address
SortRed = Intersect(Columns(4), Selection.Rows(1)).Address

2 个答案:

答案 0 :(得分:1)

如果您确定所有子数组中只有一个匹配元素,请使用flatMap的一个小技巧。

let a = {
  sub: [
     {
      id: 1,
      s: [
      	{id: 5},
        {id: 1}
      ]
    },
    {
      id: 2,
      s: [
      	{id: 6},
        {id: 3}
      ]
    },
    {
      id: 3,
      s: [
      	{id: 9},
        {id: 2}
      ]
    }
  ]
}

console.log(a.sub.flatMap((a, i) => {
  const j = a.s.findIndex(z => z.id === 9);
  return j > -1 ? [i, j] : []
}));

这将返回在i中包含索引a.sub的数组,在其中找到匹配的元素,后跟在j中包含索引的a.sub[i].s,其中匹配的元素找到了元素。

注意flatMap是该标准的较新版本,因此可能无法在较旧的浏览器中使用。如果您需要解决的话,请务必使用类似Babel的polyfill或Transpiler。

答案 1 :(得分:0)

尝试一下:

let a = {
  sub: [
     {
      id: 1,
      s: [
      	{id: 5},
        {id : 1}
      ]
    },
    {
      id: 2,
      s: [
      	{id: 6},
        {id: 3}
      ]
    },
    {
      id: 3,
      s: [
      	{id: 9},
        {id: 2}
      ]
    }
  ]
}

v = 9 

id1 = a.sub.findIndex(e => e.s.findIndex(ee => ee.id === v)!= -1)
id2 = a.sub[id1].s.findIndex(e => e.id === v )

console.log(id1) //index of the object
console.log(id2) //index within that object's s array