【问题标题】:How to return specific Json part as independent object?如何将特定的 Json 部分作为独立对象返回?
【发布时间】:2019-07-10 14:25:27
【问题描述】:

我有如下所示的 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 相同的对象。我也可以使用 ids 1 和 2 获取分离的对象。但是当我需要获取 id = 3 的对象时,我得到的只是控制台日志中的“未定义”错误。 那么,如果每次调用带参数的 CurrentNodeReturn 函数(我提到的所有主要对象,节点的 id 应该返回到起始调用点),我该如何改进函数的算法呢?

【问题讨论】:

    标签: javascript json object search


    【解决方案1】:

    如果每次调用带参数的 CurrentNodeReturn 函数,如何改进函数的算法?

    首先,您应该更改停止条件以检查 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))

    【讨论】:

      猜你喜欢
      • 2015-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多