【问题标题】:Get value from a json object after appending with dynamic variable附加动态变量后从 json 对象中获取值
【发布时间】:2018-02-27 05:59:40
【问题描述】:

如果我有以下 JSON 对象:

let jsonObject = {a: {b: "c"}};

if x = "a",

我知道我能做到

console.log(jsonObject[x]) // which prints {b: "c"}

但是如果我有 x = "a.b",

我怎样才能做到相当于console.log(jsonObject.a.b) // prints "c";

我试过 console.log(jsonObject[x]) ,这显然行不通。

有没有办法可以做到这一点。 我希望我的问题很清楚,如果没有,请告诉我,我会尝试重新表述。

【问题讨论】:

    标签: javascript angularjs json


    【解决方案1】:

    您可以通过. 拆分属性,然后使用reduce 函数遍历对象并一一获取属性。在函数之后,您将获得返回值中的最后一个。想要多深,可以用。

    const jsonObject = {a: {b: 'c'}};
    const x = 'a.b';
    const properties = x.split('.');
    
    const item = properties.reduce((obj, prop) => obj[prop], jsonObject);
    
    console.log(item);

    【讨论】:

    • 跟他的案子有关,他需要怎么抓
    • 谁能给我上面代码的非es6版本..我的框架不支持上面的语法。
    【解决方案2】:

    您可以使用split(".") 拆分属性访问器,这将为您提供两个属性的数组。您可以使用它们来访问该属性。

    您还可以遍历此数组以动态访问该值。

    let jsonObject = {a: {b: "c"}};
    var x = "a.b";
    var props = x.split(".");
    var c = jsonObject[props[0]][props[1]];
    console.log(c);

    【讨论】:

      【解决方案3】:

      对于这个有限的要求,你可以使用reduce的一个小函数

      var fnGet = ( obj, x ) => x.split( "." ).reduce( ( a, c ) => a[c] , obj );
      

      然后调用它为

      try
      {
         console.log( fnGet( jsonObject, x ) ); 
      }
      catch(e)
      {
         console.error( "invalid property or object" );
      }
      

      【讨论】:

        【解决方案4】:

        你可以使用array.prototype.reduce:

        var jsonObject = {a: {b: "c"}};
        var x = "a.b";
        var val = x.split('.').reduce((m, o) => m && m[o], jsonObject);
        console.log(val);

        简写 if m && m[o] 是为了防止 Cannot read property 'x' of undefined 错误,例如 cas x = "a.d.c";

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-03
          • 2020-09-02
          • 2010-12-27
          • 2016-10-07
          • 2020-10-21
          • 1970-01-01
          • 2016-01-29
          • 1970-01-01
          相关资源
          最近更新 更多