将数组值拆分为对象?

时间:2012-06-02 07:31:45

标签: javascript arrays object

我想知道如何通过拆分值将数组转换为对象?

var obj = {
    id: '',
    val: ''
}

我的意思是 - 如果我有像

这样的数组

["abc12", "abc1", "def12", "abc454"]

我如何split关闭前3个值 - 所以它最终像对象一样:

{id: 'abc', val: 12}, {id: 'abc', val: 1} ...

3 个答案:

答案 0 :(得分:1)

编辑:不是问题的答案

这不会产生所需的映射数组,而是在单个对象中。 对不起,误读了你的问题:(

下面的答案将返回一个Object而不是一个Objects数组。


您可以使用数组的reduce方法轻松地将此类数组折叠到对象中:

var source = ["abc12", "abc1", "def12", "abc454"];
var obj = source.reduce(function(o, str) {
  var key = str.substr(0, 3)
  var value = parseInt(str.substr(3))
  o[key] = value;
  return o;
}, {})

// obj = { abc: 454, def: 12 }

答案 1 :(得分:1)

source.map(function(x) {
  return { id: x.substr(0,3), val: +(x.substr(3)) };
}

答案 2 :(得分:0)

一种解决方案是将数组(如herby所示)映射到一个函数,该函数将数组元素转换为所需形式的对象。
在这种情况下,id由第一个数字前的所有字符表示,val表示字符串后面的数字:

source.map(function(x) {
    return { 
        id: x.replace(/(^.*?)\d+$/,'$1'), 
        val: parseInt(x.replace(/^.*?(\d+)$/,'$1'),10) 
    };
});

Here's a working demo

Ps:您可能需要小心并检查map原型链中是否存在Array方法,因为较旧的浏览器可能没有实现此方法。这是一个解释如何涵盖此浏览器不兼容性的链接:http://www.tutorialspoint.com/javascript/array_map.htm