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

标签 javascript

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

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.findIndex(a => a.s.findIndex(z => z.id === 9)))

最佳答案

如果您确定所有子数组中只有一个匹配元素,这里有一个关于 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[<em>i</em>].s找到匹配元素的位置。

注意flatMap是标准中相对较新的补充,因此它可能无法在较旧的浏览器中工作。如果您担心这个问题,请务必使用 Polyfill 或像 Babel 这样的转译器。

关于javascript - 查找嵌套数组中项目的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56844052/

相关文章:

javascript - 如何使用循环比较两个对象与嵌套对象数组

javascript - 如何在 React Native ListView 中过滤和呈现重复出现的嵌套 JSON 数据?

javascript - 为键和值对构建一个 JSON 结构,其中每个项的键都会发生变化?

javascript - Javascript 和 jQuery 中的 Trapping Function not defined 错误

javascript - 圆没有使用 Canvas 正确地通过线连接

javascript - 如何在条形图的条形上添加文本?

javascript - THREE.SpriteCanvasMaterial 不是构造函数 | Angular 7

javascript - Etherscan.io websocket 发送旧交易

javascript - 将 mousemove 事件参数存储在全局变量中可能会导致性能问题?

javascript - 单击元素后关闭 css 悬停下拉菜单