【问题标题】:Defining a nested object property in Javascript [duplicate]在Javascript中定义嵌套对象属性[重复]
【发布时间】:2016-06-22 13:09:22
【问题描述】:

我需要将 JSON 对象发送到需要属性的服务器 是嵌套的。例如,数据对象可以嵌套 2 层深。但是,不能简单地直接声明对象:

var foo = {};
foo.bar.bartwo = "data"; //Uncaught TypeError

我目前正试图通过手动创建嵌套对象层来绕过这一点。

var foo = {};
foo.bar = {};
foo.bar.bartwo = "data"; //Successful 

但是,如果对象需要多层嵌套,这很快就会失控。

在 Javascript 或 Jquery 中是否有更好的方法来处理这个问题(通过简单地打第二个代码示例是行不通的)?

澄清:该解决方案应该能够允许直接访问嵌套属性,不需要同时创建所有中间属性。

【问题讨论】:

  • var foo = {bar: {bartwo: "data"}};
  • 创建简单的“命名空间”函数。或谷歌一个
  • @naththedeveloper 虽然您的解决方案更简洁,但它实际上并没有解决根本问题。嵌套可能需要动态生成多个级别,这不适用于您的示例。
  • 您要问的是不可能的,因为要向对象添加属性,该对象必须存在。你能做的最好的事情就是创建一个函数来减轻这样做的负担,比如this one
  • var foo['bar'] = {'a': 'b'} 你可以这样做

标签: javascript jquery object


【解决方案1】:

没有定义嵌套对象,即 foo.bar = {}; 你不能使用它或给它赋值 必须先定义 javascript 对象才能使用它 否则它会给你“未定义”错误,即 foo.bar 未定义

【讨论】:

    【解决方案2】:

    创建一个执行此操作的小方法

    function nested(x, y){
    nestedA="";
    parts = x.split('.');
      for(i=0; i<parts.length; i++) {
        nestedA += parts[i];
        eval(nestedA + ' = {}');
        nestedA += '.';
    }
    eval(nestedA.slice(0,-1)+ '= "'+y+'"');
    }
    nested('foo.bar.bartwo', "data");
    

    【讨论】:

    • 测试你的代码。它有几个语法问题。
    • .= 在做什么?是串联吗?
    • 添加到字符串
    • 连接是 JS 将是 +=,但无论如何你都会用 {} 覆盖该值。请运行您的代码。
    • 谢谢我错过了
    猜你喜欢
    • 2021-05-09
    • 1970-01-01
    • 2023-03-09
    • 2020-11-03
    • 2018-04-08
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    相关资源
    最近更新 更多