使用键值获取对象中特定的键深度

时间:2019-03-08 08:15:04

标签: javascript

const item = {
  id: 'item1',
  children: [ 
    { id: 'item1-1',
      children: [
        { id: 'item1-1-1' },
        { id: 'item1-1-2' },
        { id: 'item1-1-3' },
      ]
    },
    { id: 'item1-2',
      children: [
        { id: 'item1-2-1' }
      ]
    }
  ]
}

喜欢,

function getLevelOfId(){
  ...
}

getLevelOfId('item1') =====> return 1
getLevelOfId('item1-2') =====> return 2
getLevelOfId('item1-1-1') =====> return 3
getLevelOfId('item1-1-2') =====> return 3

如何使用JavaScript获取特定对象的深度?

不使用id字符串。像('item1-2').split('-').length,因为每个对象都有随机ID。有没有简单的方法?

2 个答案:

答案 0 :(得分:3)

您需要迭代所有对象,如果找到,则对递归深度的每个级别取一个。

function getLevelOfId(object, id) {
    var level;
    if (object.id === id) return 1;
    object.children && object.children.some(o => level = getLevelOfId(o, id));
    return level && level + 1;
}

const item = { id: 'item1', children: [{ id: 'item1-1', children: [{ id: 'item1-1-1' }, { id: 'item1-1-2' }, { id: 'item1-1-3' }] }, { id: 'item1-2', children: [{ id: 'item1-2-1' }] }] };

console.log(getLevelOfId(item, 'item1'));     // 1
console.log(getLevelOfId(item, 'item1-2'));   // 2
console.log(getLevelOfId(item, 'item1-1-1')); // 3
console.log(getLevelOfId(item, 'item1-1-2')); // 3
console.log(getLevelOfId(item, 'foo'));       // undefined

答案 1 :(得分:1)

如果结构ID和子元素固定,那么如何在json字符串中搜索整个值,例如“ item1-1-1”:

{“ id”:“ item1”,“ children”:[{“ id”:“ item1-1”,“ children”:[{“ id”:“ item1-1-1”},{“ id “:” item1-1-2“},{” id“:” item1-1-3“}]},{” id“:” item1-2“,”儿童“:[{” id“:” item1 -2-1“}]}]}

level =(“ {”的数量)-(“}”的数量)//在搜索到的字符串的正位置之前