如何将包含对象字符串的数组转换为常规键对象?

时间:2014-05-21 13:24:58

标签: javascript jquery arrays object underscore.js

我正在尝试将我的uri转换为对象值,作为我转换的成功级别,并使用冒号分割为数组值。但我无法将这些转换为常规对象。任何人都建议我一个好方法。我和我一起起诉了下划线。

这是我的代码:

var ar = ["id:1231", "currency:GBP"];

var outPut = _.map(ar, function(item){
    return '{' + item + '}';
})

console.log(outPut); //consoles as ["{id:1231}", "{currency:GBP}"]

我怎样才能得到这样的结果:

var object = {id:1231, currency:GBP}

下划线有什么构建方法吗?

3 个答案:

答案 0 :(得分:4)

有几种方法可以解决这个问题,而Underscore为他们提供帮助。

一种方法是使用_.reduce逐步将键/值对添加到最初为空的"结果"对象:

var obj = _.reduce(ar, function(result, item) {
    var keyAndValue = item.split(":");
    result[keyAndValue[0]] = keyAndValue[1];
    return result;
}, {});

请注意,您可以执行the same without Underscore,除非您必须支持IE 8或更早版本。

答案 1 :(得分:1)

没有任何第三方库:

var output = {} ;
var ar = ["id:1231", "currency:GBP"];
ar.forEach(function (item) {
    var values = item.split(':') ;
    output[values[0]] = values[1] ;
}) ;

输出console.log(output)

Object {id: "1231", currency: "GBP"}

答案 2 :(得分:0)

这是使用jQuery的另一个版本:

var newObj = {};
$.each( ar, function( i, v ) {
    var kv = v.split( ":" );
    newObj[ kv[0] ] = kv[ 1 ];
 });
 // newObj = {id:"1231", currency:"GBP"}