如何将特定的Json部分作为独立对象返回?

问题描述 投票:2回答:1

我有Json对象,如下所示:

{
  id : 0,
  cnt: 1,
  someStuff : 'lalala',
  1: {
    id : 1,
    cnt: 2,
    someStuff : 'allgood',
    1: {
      id : 2,
      cnt: 0,
      someStuff: 'nice'
    },
    2: {
      id : 3,
      cnt : 0,
      someStuff: 'nice2'
    }
  }
}

我想要做的就是将这个Json的某些部分作为独立对象返回。如果我使用此功能:

function CurrentNodeReturn(obj, idReturn) {
    if (idReturn == 0) { return obj; }
    for (var i = 1; i < obj.cnt + 1; i++) {
        if (obj[i].id == idReturn) {
            return obj[i];
        } else {
            return CurrentNodeReturn(obj[i], idReturn);
        }
    }
}

我可以使用Id = 0获得我发送的相同对象。此外,我可以得到分离的对象机智ID 1和2.但是当我需要获取id = 3的对象时,我得到的是控制台日志中的“未定义”错误。那么如果我每次使用参数调用CurrentNodeReturn函数(我提到的所有主要对象,节点的id应该返回到起始调用点),我怎样才能改进函数的alghoritm?

javascript json object search
1个回答
1
投票

如果每次使用参数调用当前节点返回功能,如何改进我的函数算法?

首先,您应该更改停止条件以检查id是否匹配或对象是否未定义。

否则,如果您没有达到停止条件,则循环遍历子项并递归调用函数,如果不是undefined则返回值。

const data = { id : 0, cnt: 1, someStuff: 'lalala', 1: { id : 1, cnt: 2, someStuff: 'allgood', 1: { id : 2, cnt: 0, someStuff: 'nice' }, 2: { id : 3, cnt : 0, someStuff: 'nice2' } } };

function getObject(obj, id) {
  if (!obj || obj.id === id) {
    return obj;
  }
  for (let i = 0; i < obj.cnt; i++) {
    const child = getObject(obj[i + 1], id);
    if (child) {
      return child;
    }
  }
}

console.log(getObject(data, 2))
console.log(getObject(data, 3))
© www.soinside.com 2019 - 2024. All rights reserved.