首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数组对象匹配条件下获取数组的索引

在数组对象匹配条件下获取数组的索引
EN

Stack Overflow用户
提问于 2022-01-06 10:58:25
回答 5查看 200关注 0票数 0

我有这样一个数组:

代码语言:javascript
复制
parent = [
    {'id':'id_1','level':'1-1','children':['id':'id_1','level':'1-1-0','children':[........]},
    {'id':'id_2','level':'2-2','children':['id':'id_1','level':'2-1-0','children':[........]}
]

如何获得与子数组对象条件匹配的父数组索引?

例如,

代码语言:javascript
复制
If (level == '2-1-0') 

产出:1

预期行为:

它应该返回1,因为父数组的第1‘索引中存在2-1-0级别。

注意:,我尝试了如下

代码语言:javascript
复制
var index = parent .findIndex(data => data.level== result.level);

它不会检查子数组对象。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2022-01-06 11:33:54

你需要递归

代码语言:javascript
复制
const findItemNested = (arr, level, nestingKey) => (
  arr.reduce((a, item, index) => {
    if (a) return a;
    if (item.level === level) return index;
    if (item[nestingKey]) return findItemNested(item[nestingKey], level, nestingKey)
  }, null)
);
const testArr = [
      {
        'id':'id_1',
       'level':'1-1',
       'children':[
         {'id':'id_1'},
         {'level':'1-1-0'},
         {'children':[]}
       ]
      },
      {'id':'id_2','level':'2-2','children':[{'id':'id_1'},{'level':'2-1-0'},{'children':[]}]}
  ];

const res = findItemNested(testArr, '2-1-0', "children");

console.log(res) //  1
票数 0
EN

Stack Overflow用户

发布于 2022-01-06 11:05:31

您提供的数组是错误的,但是我认为您需要这样的东西:

代码语言:javascript
复制
const parent = [
    {'id':'id_1','level':'1-1','children':[{'id':'id_1','level':'1-1-0'}]},
    {'id':'id_2','level':'2-2','children':[{'id':'id_1','level':'2-1-0'}]}
]

const index = parent.findIndex(p => p.children.find(c => c.level === '2-1-0') !== undefined);

console.log(index);

在“2-1-0”的位置,你应该把索引放在你想要检查的地方。

票数 1
EN

Stack Overflow用户

发布于 2022-01-06 11:18:31

这是一个递归问题,可能会导致大数组的堆栈失效。

脚本首先遍历树的深度,并且可以进行优化以检测请求的级别深度,并且只检查该级别,从而提高了性能。

代码语言:javascript
复制
var weirdProblem = level => (carry, current, idx) => {
  // bail if already found 
  if (carry > -1) {
    return carry;
  }

  // check current item's children and return current idx if matching
  if (current.children.some(child => child.level === level)) {
    return idx;
  }

  // traverse current item's children
  return current.children.reduce(weirdProblem(level), -1);
};

var index = parent.reduce(weirdProblem('2-1-0'), -1);

没有测试脚本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70606077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档