javascript到关联对象的字符串

时间:2016-04-01 01:14:50

标签: javascript json javascript-objects

我只是想知道是否有一种简单的方法可以从需要双重拆分的字符串创建关联对象,thisstring是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("~");
}

但我对这种方法不满意,因为我需要创建一个表来显示这些数据,而我得到这个api的网站可能会改变字符串响应的顺序,或者可能会添加其他值< / p>

1 个答案:

答案 0 :(得分:1)

你所做的就是你可以做的所有事情,尽管我不会将for..in用于典型的阵列。只要标题与其余数据一致,您就应该能够处理任何值序列,例如

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));

这将创建所需的结构,无论每条记录中有多少项,它只需要标题部分中每个项目的标签和每个数据部分中每个项目(可能为空)的值。

修改

再考虑一下,当 reduce 是明显的候选人时,我不知道为什么我在内部使用 forEach

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));