javascript 字符串到关联对象
javascript String to associative object
我只是想知道是否有一种简单的方法可以从需要双重拆分的字符串创建关联对象,这个字符串是 api 调用的结果,因此对象的长度可能会改变。
例如,如果我有一个如下所示的字符串:
var infoValue = 'Loan Date~Loan Number~Loan Amount|15/03/2016~1042~620|15/03/2016~1044~372';
我想要一个看起来像这样的对象:
[
{
"Loan Date":"15/03/2016",
"Loan Number":"1042",
"Loan Amount":"620",
},
{
"Loan Date":"15/03/2016",
"Loan Number":"1042",
"Loan Amount":"620",
}
]
我现在正在做的事情是这样的
var res = infoValue.split("|");
var activeLoans = new Array();
for(field in res) {
if(res[field] != ''){
activeLoans.push(res[field]);
}
}
for(field in activeLoans){
var row = activeLoans[field];
rowSplit = row.split("~");
}
但我对这种方法不满意,因为我需要创建一个 table 来显示这些数据,而我得到这个 api 的网站可能会改变响应的顺序的字符串,或者可能添加其他值
你所做的就是你所能做的,尽管我不会将 for..in 用于典型的数组。您应该能够处理任何值序列,只要 header 与其余数据一致,例如
var infoValue = 'Loan Date~Loan Number~Loan Amount|15/03/2016~1042~620|15/03/2016~1044~372';
function parseInfoValue(s) {
var b = s.split('|');
var header = b.shift().split('~');
return b.reduce(function(acc, data) {
var c = data.split('~');
var obj = {};
c.forEach(function(value, i){
obj[header[i]] = value;
})
acc.push(obj);
return acc;
},[]);
}
var x = parseInfoValue(infoValue);
document.write(JSON.stringify(x));
无论每条记录中有多少项,这都将创建所需的结构,它只需要 header 部分中的每个项的标签和每个数据中每个项(可能为空)的值部分。
编辑
再考虑一下,我不知道为什么我在内部使用 forEach 而 reduce 是明显的候选者:
var infoValue = 'Loan Date~Loan Number~Loan Amount|15/03/2016~1042~620|15/03/2016~1044~372';
function parseInfoValue(s) {
var b = s.split('|');
var header = b.shift().split('~');
return b.reduce(function(acc, data) {
acc.push(data.split('~').reduce(function(obj, value, i) {
obj[header[i]] = value;
return obj;
}, {}));
return acc;
}, []);
}
var x = parseInfoValue(infoValue);
document.write(JSON.stringify(x));
我只是想知道是否有一种简单的方法可以从需要双重拆分的字符串创建关联对象,这个字符串是 api 调用的结果,因此对象的长度可能会改变。
例如,如果我有一个如下所示的字符串:
var infoValue = 'Loan Date~Loan Number~Loan Amount|15/03/2016~1042~620|15/03/2016~1044~372';
我想要一个看起来像这样的对象:
[
{
"Loan Date":"15/03/2016",
"Loan Number":"1042",
"Loan Amount":"620",
},
{
"Loan Date":"15/03/2016",
"Loan Number":"1042",
"Loan Amount":"620",
}
]
我现在正在做的事情是这样的
var res = infoValue.split("|");
var activeLoans = new Array();
for(field in res) {
if(res[field] != ''){
activeLoans.push(res[field]);
}
}
for(field in activeLoans){
var row = activeLoans[field];
rowSplit = row.split("~");
}
但我对这种方法不满意,因为我需要创建一个 table 来显示这些数据,而我得到这个 api 的网站可能会改变响应的顺序的字符串,或者可能添加其他值
你所做的就是你所能做的,尽管我不会将 for..in 用于典型的数组。您应该能够处理任何值序列,只要 header 与其余数据一致,例如
var infoValue = 'Loan Date~Loan Number~Loan Amount|15/03/2016~1042~620|15/03/2016~1044~372';
function parseInfoValue(s) {
var b = s.split('|');
var header = b.shift().split('~');
return b.reduce(function(acc, data) {
var c = data.split('~');
var obj = {};
c.forEach(function(value, i){
obj[header[i]] = value;
})
acc.push(obj);
return acc;
},[]);
}
var x = parseInfoValue(infoValue);
document.write(JSON.stringify(x));
无论每条记录中有多少项,这都将创建所需的结构,它只需要 header 部分中的每个项的标签和每个数据中每个项(可能为空)的值部分。
编辑
再考虑一下,我不知道为什么我在内部使用 forEach 而 reduce 是明显的候选者:
var infoValue = 'Loan Date~Loan Number~Loan Amount|15/03/2016~1042~620|15/03/2016~1044~372';
function parseInfoValue(s) {
var b = s.split('|');
var header = b.shift().split('~');
return b.reduce(function(acc, data) {
acc.push(data.split('~').reduce(function(obj, value, i) {
obj[header[i]] = value;
return obj;
}, {}));
return acc;
}, []);
}
var x = parseInfoValue(infoValue);
document.write(JSON.stringify(x));