【问题标题】:How to use get the value from the nth child key of the object by using variable?如何使用变量从对象的第n个子键中获取值?
【发布时间】:2016-05-10 09:23:47
【问题描述】:

问题类似这样:How do I interpolate a variable as a key in a JavaScript object?

但是,我很难在第 n 个键上使用变量:

我有一个对象,就是:

var object = {};
object.foo = "foo";
object.foo.bar = "bar";
object.foo.bar.alice = "alice";
object.foo.bar.alice.bob = "bob";

我可以通过使用变量 object["foo"] 来获取 object.foo 的值 (foo)

但我找不到访问object.foo.bar 值的方法。

我试过object["foo"]["bar"],但它不起作用。

除了我的问题,我怎样才能得到价值

object.foo.bar.alice
object.foo.bar.alice.bob

也使用变量?

谢谢。

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    你需要一个 foo 的对象,因为 foo 是一个primitive type

    var object = {};
    object.foo = "foo";
    object.foo.bar = "bar"; // does not work!
    

    这行得通

    var object = {};
    object.foo = {};
    object.foo.bar = "bar"; // work!
    

    【讨论】:

      【解决方案2】:

      当你这样做时

      var object = {};
      object.foo = "foo";
      

      您将属性定义为string,它不会存储密钥,因为它是字符串文字 不是字符串对象

      你需要尝试

      var object = {};
      object.foo = new String("foo");
      

      现在它可以在object.foo中存储更多属性。

      var object = {};
      object.foo = new String( "foo" );
      object.foo.bar = new String( "bar" );
      object.foo.bar.alice = new String( "alice" );
      object.foo.bar.alice.bob = new String( "bob" );
      
      console.log( object );

      【讨论】:

      • 感谢您的回答,但是,我如何访问 [[PrimitiveValue]] 的值以输出 foo ?图片:i.imgur.com/ZYhUflM.png
      【解决方案3】:

      你需要作为对象赋值 {key:value,key:value}

      object.foo = {0:"foo",bar:{}};
      object.foo.bar = {0:"bar",alice:{}};
      object.foo.bar.alice = {0:"alice",bob:{}};
      object.foo.bar.alice.bob = "bob";
      console.log(object.foo.bar.alice);
      console.log(object.foo.bar.alice.bob);
      

      【讨论】:

        【解决方案4】:

        您可以开发一个简单的函数来动态获取嵌套对象及其键。比如下面这样。对于套装版本,类似的方法也足够了。

        Object.prototype.getNestedValue = function(...a) {
          return a.length > 1 ? (this[a[0]] !== void 0 && this[a[0]].getNestedValue(...a.slice(1))) : this[a[0]];
        };
        
        var arr = [{fox: [{turn:[857, 432]}]}, {sax: [{pana:[777, 987]}]}, {ton: [{joni:[123, 567]}]}, {piu: [{burn:[666, 37]}]}, {sia: [{foxy:[404, 696]}]}],
          myObj = {foo: {bar: {alice: {bob: "bob"}}}};
        
        document.write("<pre>" + JSON.stringify(arr.getNestedValue(3,"piu",0,"burn",1),null,2) + "</pre>");
        document.write("<pre>" + JSON.stringify(arr.getNestedValue(3,"piu",0,"burn"),null,2) + "</pre>");
        document.write("<pre>" + JSON.stringify(myObj.getNestedValue("foo","bar","alice","bob"),null,2) + "</pre>");

        请记住,您可以按照出现的顺序在数组中设置嵌套属性,然后像 myDeeplyNestedObj.getNestedValue(...propsArray) 一样调用

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-05
          • 2012-11-06
          • 2014-04-21
          相关资源
          最近更新 更多