我有这个正常的数组
["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中使用此结构?
答案 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
错误