Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中定义嵌套对象属性_Javascript_Jquery_Object - Fatal编程技术网

在Javascript中定义嵌套对象属性

在Javascript中定义嵌套对象属性,javascript,jquery,object,Javascript,Jquery,Object,我需要向服务器发送一个JSON对象,该服务器要求 是嵌套的。例如,数据对象可能嵌套在两层深的位置。但是,不能简单地直接声明对象: var foo = {}; foo.bar.bartwo = "data"; //Uncaught TypeError 我目前正试图通过手动创建嵌套对象层来绕过此问题 var foo = {}; foo.bar = {}; foo.bar.bartwo = "data"; //Successful 但是,如果对象需要多个嵌套级别,这可能会很快失控 Javascr

我需要向服务器发送一个JSON对象,该服务器要求 是嵌套的。例如,数据对象可能嵌套在两层深的位置。但是,不能简单地直接声明对象:

var foo = {};
foo.bar.bartwo = "data"; //Uncaught TypeError
我目前正试图通过手动创建嵌套对象层来绕过此问题

var foo = {};
foo.bar = {};
foo.bar.bartwo = "data"; //Successful 
但是,如果对象需要多个嵌套级别,这可能会很快失控

Javascript或Jquery中是否有更好的方法来处理此问题(仅通过第二个代码示例无法解决此问题)


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

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

,而不定义嵌套对象,即foo.bar={}; 不能使用或为其赋值 必须首先定义javascript对象才能使用它
否则,它将给您“未定义”错误,即foo.bar未定义

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

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");
函数嵌套(x,y){
nestedA=“”;
部分=x.分割('.');

对于(i=0;i创建一个小方法来实现这一点

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");
函数嵌套(x,y){
nestedA=“”;
部分=x.分割('.');


对于(i=0;i
var foo={bar:{bartwo:“data”}};
create simple“namespace”或者谷歌one@naththedeveloper虽然您的解决方案更简洁,但实际上并不能解决根本问题。嵌套可能需要动态生成多个级别,这对您的示例不起作用。您所要求的是不可能的,因为要向对象添加属性,对象必须存在。您所能做的最好是制作一个可以减轻负担的函数,比如.var foo['bar']={'a':'b'}您可以这样做
var foo={bar:{bartwo:“data”};
create simple“namespace”或者谷歌one@naththedeveloper虽然您的解决方案更简洁,但实际上并不能解决根本问题。嵌套可能需要动态生成多个级别,这对您的示例不起作用。您所要求的是不可能的,因为要向对象添加属性,对象必须存在。您所能做的最好是做一个函数来减轻这样做的负担,比如.var foo['bar']={'a':'b'}你可以这样做测试你的代码。它有几个语法问题。
=
在做什么?它是连接吗?添加到stringConcatenation中的JS将是
+=
,但是你会用
{}覆盖这个值
无论如何。请运行你的代码。谢谢,我错过了测试你的代码。它有几个语法问题。
=
在做什么?它是连接吗?添加到字符串连接是JS将是
+=
,但是你正在用
{}
重写值。请运行你的代码。谢谢,我错过了