复制/重命名JSON对象数组

时间:2015-11-11 06:21:51

标签: javascript json

以低于JSON格式从服务器获取数据

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

我正在尝试在同一个对象中创建修改的新副本(重命名),因为我的其他数据期望JSON具有相同的格式但名称不同以进行修改。

所以,虽然我会预先制作并创建相同的副本,如下所示

{
"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"
        }
    }
]}

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

由于

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

除了@MjrKusanagi建议的方式之外别无他法,但我建议采用另一种方法。

创建一个获取原始对象并用新名称替换所选键的函数,返回一个新对象而不更改原始对象(不变性)

该函数可以有3个参数:

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

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

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

之后,您可以通过创建新密钥来更改密钥名称,并且不要忘记从新对象中删除旧密钥:

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

最后,您可以返回此新对象,甚至在每次需要执行类似操作时都使用此功能。

使用delete被认为是不好的做法,但至少在这里您不会改变原始来源,因此您可以在其所有应用程序的生命周期中依赖其内容。