如何将重复的字符串解析成JavaScript中的对象数组?
问题描述:
我有几个对象在一个长字符串的属性,用“|”分隔,就像这样:如何将重复的字符串解析成JavaScript中的对象数组?
branches = "001|lat1|lon1|Name1|002|lat2|lon2|Name2|003|lat3|lon3|Name3|004|lat4|lon4|Name4"
headers = "ID|Latitude|Longitude|Name" //name of attributes
fieldCount = "4" //4 attributes per object
我需要变换成JavaScript对象,像这样的propper数组:
[
{
"ID": "001",
"latitude": "lat1",
"longitude": "lon1",
"name": "Name1"
},
{
"ID": "002",
"latitude": "lat2",
"longitude": "lon2",
"name": "Name2"
},
{
"ID": "003",
"latitude": "lat3",
"longitude": "lon3",
"name": "Name3"
},
{
"ID": "004",
"latitude": "lat4",
"longitude": "lon4",
"name": "Name4"
}
]
问题是如何做到这一点?
答
所有你需要做的是分割字符串通过他们从树枝阵头阵列中突然离开前项目的每个项目创建数组和循环
var branches = "001|lat1|lon1|Name1|002|lat2|lon2|Name2|003|lat3|lon3|Name3|004|lat4|lon4|Name4";
var headers = "ID|Latitude|Longitude|Name";
branches = branches.split("|");
headers = headers.split("|");
var array=[];
while(branches.length){
var x = {};
for(i=0;i<headers.length;i++){
x[headers[i]]=branches.shift();
}
array.push(x);
}
console.log(array);
答
var branches = "001|lat1|lon1|Name1|002|lat2|lon2|Name2|003|lat3|lon3|Name3|004|lat4|lon4|Name4";
var headers = "ID|Latitude|Longitude|Name"; //name of attributes
var branchArray = branches.split("|");
var headerArray = headers.split("|");
var numFields = headerArray.length; //fieldCount is redundant
var objects = []; //result will be stored here
var currentObj = {};
for(var i = 0; i < branchArray.length; ++i) {
var fieldIndex = i % numFields;
// When we just put in the last field
if(fieldIndex === (numFields - 1)) {
if(currentObj) {
objects.push(currentObj);
currentObj = {};
}
}
currentObj[headerArray[fieldIndex]] = branchArray[i];
}
有边缘的情况下例如分支中的字段数量不能被字段中的字段数整除,但您没有明确指出如何处理这些字段。
我会使用'split'和一些循环。 – Mathletics
我会创建一个列表,将分支var分割为|,然后迭代每个fieldCount并在循环中创建带有字段的对象,然后将其添加到列表中 – xavvvier