Javascript:使用自定义键名和值将字符串数组解析为对象

时间:2017-11-08 06:14:00

标签: javascript arrays parsing object

所以我有一个字符串,其中包含一个自定义http标头列表,其格式如下:

var headers = "Referer=SomeValue|User-Agent=SomeUserAgent";

我将管道拆分为分隔符:

var splitHeaders = headers.split("|");

我离开了一个我可以循环的数组,我试图将该字符串数组转换为一个对象。这就是我到目前为止所做的:

var customHeaders = {};
for (var i in splitHeaders) {
    var data = splitHeaders[i].split("=");
    customHeaders[data[0]] = data[1];
}

我实际上想要创建的是一个名为customHeaders的对象,用于保存以下值:

customHeaders = {
    "Referer":"https://someurl.com/",
    "User-Agent":"Some Browser"
};

我做错了吗?

1 个答案:

答案 0 :(得分:0)

你走在正确的轨道上。使用splitHeaders的长度作为限制器使用更标准形式的for循环:

for (var i = 0; i < splitHeaders.length; i++) {

工作示例:

var headers = "Referer=SomeValue|User-Agent=SomeUserAgent";
var splitHeaders = headers.split('|');
var customHeaders = {};

for (var i = 0; i < splitHeaders.length; i++) {
  var data = splitHeaders[i].split("=");
  customHeaders[data[0]] = data[1];
}

console.log(customHeaders);

还可以使用其他方法,允许您使用诸如reduce之类的项目数组转换为对象。

var headers = "Referer=SomeValue|User-Agent=SomeUserAgent";

headers = headers
  .split('|')
  .reduce(function(obj, val) {
    var split = val.split('=');
    obj[split[0]] = split[1];
    return obj;
  }, {});

console.log(headers);