【问题标题】:Nodejs, how to get value in nested json object, middle keys are unknownNodejs,如何在嵌套的json对象中获取值,中间键未知
【发布时间】:2017-11-25 00:22:53
【问题描述】:

我有以下嵌套配置对象,我想获取值 的key1,这意味着我要返回“value1”,key1是静态的,但是 randomGeneratedNumber 和 randomGeneratedName 是来自数据库的动态。

configuration:{
 randomGeneratedNumber:
   {
       randomGeneratedName:
          {
            key1: value1,
            key2: value2
          }
    }
}

【问题讨论】:

标签: javascript json node.js npm nested


【解决方案1】:

如果我理解了这个问题,我会这样做:

let value;
for (let nestedOuter of Object.values(something.configuration))
    for (let nestedInner of Object.values((nestedOuter)))
        value = nestedInner.key1;
console.log(value);

如果您需要随机生成的值,则需要执行Object.entries 而不是同时提取键和值。

【讨论】:

  • 对不起,我记错了语法。它现在应该可以工作了。
【解决方案2】:

如果您知道您(至少)在每个级别都有一个键,则可以使用辅助函数和组合来完成:

var obj = {
  configuration: {
    randomGeneratedNumber: {
      randomGeneratedName: {
        key1: 'value1',
        key2: 'value2'
      }
    }
  }
};

function firstValue(a) {
  return a[Object.keys(a)[0]];
}

console.log(firstValue(firstValue(obj.configuration)).key1);

或者如果你有一个动态的(但已知的)深度,你可以用递归来做到这一点:

var obj = {
  configuration: {
    randomGeneratedNumber: {
      randomGeneratedName: {
        key1: 'value1',
        key2: 'value2'
      }
    }
  }
};

function firstValueDeep(a, depth) {
  var keys = Object.keys(a);
  if (+depth <= 0 || !keys.length) {
    return a;
  } else {
    return firstValueDeep(a[keys[0]], depth - 1);
  }
}

console.log(firstValueDeep(obj.configuration, 2).key1);

除此之外,您还需要研究图遍历算法,例如深度优先搜索或广度优先搜索,以找到具有“key1”作为属性的对象。

【讨论】:

    【解决方案3】:

    动态地,您可以做到这一点.. 我希望这会有所帮助或为您提供解决问题的方法。 :)

    var config = {configuration:{
     randomGeneratedNumber:
       {
           randomGeneratedName:
              {
                key1: "value1",
                key2: "value2"
              }
        }
    }};
    
    let configKeys = Object.keys(config.configuration);
    configKeys.forEach((rand)=>{
    	console.log(rand);
    	var itemKeys = Object.keys(config.configuration[rand]);
      console.log(itemKeys);
      for(var i=0;i<itemKeys.length;i++){
      	let randName = itemKeys[i];
      	console.log(config.configuration[rand][randName]['key1']);
        console.log(config.configuration[rand][randName]['key2']);
      }
    });

    【讨论】:

      猜你喜欢
      • 2021-08-26
      • 1970-01-01
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多