2012-04-21 20 views
-2

我有一个要添加到已经存在的列表中的对象列表。从PHP返回json编码并添加到变量

的数据我目前拥有的是:

var sdata = {"10":{"8":["106","22","1","1","0","0"]}}; 

所以我做这样一个Ajax请求:

var result = ajaxFunction('call.php',hid+','+ps[0]+','+ps[1]); 
if(result != false){ 
document.write(result); 
sdata += result; //add to it 
} 

返回的数据,并分配到的结果是:

{2: {7:[119, 22, 1, 1, 0, 0]}} 

但我想知道的是:

sdata += result; 

将新数据添加到“sdata”的正确方法是什么?

回答

2

+=用于添加或字符串连接,不用于连接两个对象。要将sdataresult放在一起,则通过result和每个密钥循环,您将在sdata中创建一个同名密钥,以指向result中的相应数据。这是一个更清晰的解释,因为JavaScript对象不会从一个拷贝到另一个,他们只是指出。

以下代码仅仅是仅复制第一级值的“浅拷贝”。它也会覆盖第一个对象中的任何内容。您可以添加条件以防止覆盖。

for(var key in result){    //loop through new results 
    if(result.hasOwnProperty(key){ //if it's an end property, not from prototype 
     sdata[key] = result[key]  //put new key to old oject pointing to new set of values 
    } 
} 

最终的结果是这样的:

sdata = { 
    "10" : {"8":["106","22","1","1","0","0"]}, 
    "2" : {7:[119, 22, 1, 1, 0, 0]} 
} 
+0

如何不会添加阵列中的第二密钥的数据和6个值? – Sir 2012-04-21 02:36:52

+0

更新了我的回答 – Joseph 2012-04-21 02:39:22

+0

啊,现在很有道理:)谢谢解释! – Sir 2012-04-21 02:40:12