1

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

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

我的意思是-如果我有一个像

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

我怎么能split关闭前 3 个值 - 所以它最终就像一个对象:

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

3 回答 3

1

编辑:不是问题的答案

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

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


您可以使用数组的方法轻松地将此类数组折叠成对象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 }
于 2012-06-02T07:39:09.903 回答
1
source.map(function(x) {
  return { id: x.substr(0,3), val: +(x.substr(3)) };
}
于 2012-06-02T07:44:24.237 回答
0

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

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

这是一个工作演示

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

于 2012-06-02T07:50:14.667 回答