2015-11-11 83 views
1

我得到的数据从服务器在以下JSON格式复制/重命名JSON对象数组

{ 
"Data": [ 
    { 
     "Id": "1", 
     "Number": 0, 
     "Modify": { 
      "Id": 0, 
      "Name": "a" 
     } 
    }, 
    { 
     "Id": "2", 
     "Number": 1, 
     "Modify": { 
      "Id": 1, 
      "Name": "b" 
     } 
    } 
]} 

,我试图,因为我的其他数据被期待创造新副本(重命名)修改相同的对象内具有相同格式但不同名称的JSON进行修改。

所以,我以为我的foreach和创建相同的副本,这将形成类似下面

{ 
"Data": [ 
    { 
     "Id": "1", 
     "Number": 0, 
     "Modify": { 
      "Id": 0, 
      "Name": "a" 
     },"New": { 
      "Id": 0, 
      "Name": "a" 
     } 
    }, 
    { 
     "Id": "2", 
     "Number": 1, 
     "Modify": { 
      "Id": 1, 
      "Name": "b" 
     }, 
    "New": { 
      "Id": 1, 
      "Name": "b" 
     } 
    } 
]} 

是否有更好的方法,我可以重命名对象或者我应该创建一个副本。什么是更好的复制方式?

感谢

回答

0

For循环是一个很好的办法做到这一点.. data[i].Name = data[i].Modify;。我相当肯定在Javascript中没有比这更好的方法。

0

除了@MjrKusanagi提出的建议,没有别的办法,但我建议另一种方法。

做一个函数,你原来的对象,并替换为新的名称选择键,返回一个新的对象,而不改变原来的(永恒)

功能可能需要3个参数:

function modifyObject(object, oldKey, newKey) {...} 

在函数内部,你可以使用Object.assign方法来创建原始对象的副本(副本,不是引用):

var newObj = Object.assign({}, object); 

之后,你可以通过创建一个新的更改键名,不要忘记从新的对象中删除旧密钥:

newObj.newKey = newObj.oldKey; 
delete newObj.oldKey, 

最后你可以返回这个新的对象,甚至使用此功能,每次你需要做类似的事情。

使用delete被认为是不好的做法,但至少在这里你并没有改变你的原始源代码,所以你可以依赖它的内容来覆盖你的所有应用程序的生命周期。