将普通数组转换为对象

时间:2017-02-25 07:44:54

标签: javascript

我有这个正常的数组

["Company="Google",Country="USA",Id="123"", "Company="Volvo",Country="SWEDEN",Id="999""]

我想用它的值构建一个对象。

预期结果是

  {
    "root": [{
            "Company": "Google",
            "Country": "USA",
            "Id": "123"
        }, {
            "Company": "Volvo",
            "Country": "SWEDEN",
            "Id": "999"
        }
    ]
}

如何在JavaScript中使用此结构?

1 个答案:

答案 0 :(得分:1)

您发布的数组无效我们需要mix single and double quotes这样:

['Company="Google",Country="USA",Id="123"', 'Company="Volvo",Country="SWEDEN",Id="999"']

如果您将数组作为请求的响应并且您从控制台复制了数据,那么它必须使用\"转义并且您不必修复它。

将数组转换为对象:

var myArray = ['Company="Google",Country="USA",Id="123"', 'Company="Volvo",Country="SWEDEN",Id="999"']
var myObject = array2obj(myArray);

function array2obj(myArr) {
    var myObj = {root:[]}
    myArr.forEach(function(v) {
        var currentObj = {}
        v.split(",").forEach(function(vi) {
            var tmp = vi.replace(/\"/g, "").split("=");
            currentObj[tmp[0]] = tmp[1];
        });
        myObj.root.push(currentObj);
    });
    return myObj
}

正如您所看到的,假设您的数组存储在var myObject = array2obj(myArray)中,您可以调用此函数myArray

现在您的对象位于变量myObject

{
    "root": [
        {
            "Company": "Google",
            "Country": "USA",
            "Id": "123"
        },
        {
            "Company": "Volvo",
            "Country": "SWEDEN",
            "Id": "999"
        }
    ]
}

<强>&#34;降低&#34;数组只有ids:

如评论中所述,以下内容将生成newArray = ["123", "999"]

var myArray = ['Company="Google",Country="USA",Id="123"', 'Company="Volvo",Country="SWEDEN",Id="999"'];

var newArray = myArray.map(function(x) {
    var id = /,\s*id\s*=\s*"(.*?)"/gi.exec(x);
    if (id) return id[1]
});

我使用正则表达式来匹配id和.map()以创建具有匹配结果的新数组。

如果您希望数组包含数字而不是字符串,请将return id[1]替换为return Number(id[1]),但您必须确保ID始终为数字,否则您将收到NaN错误