我想知道如何通过拆分值将数组转换为对象?
var obj = {
id: '',
val: ''
}
我的意思是-如果我有一个像
["abc12", "abc1", "def12", "abc454"]
我怎么能split
关闭前 3 个值 - 所以它最终就像一个对象:
{id: 'abc', val: 12}, {id: 'abc', val: 1} ...
我想知道如何通过拆分值将数组转换为对象?
var obj = {
id: '',
val: ''
}
我的意思是-如果我有一个像
["abc12", "abc1", "def12", "abc454"]
我怎么能split
关闭前 3 个值 - 所以它最终就像一个对象:
{id: 'abc', val: 12}, {id: 'abc', val: 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 }
source.map(function(x) {
return { id: x.substr(0,3), val: +(x.substr(3)) };
}
一种解决方案是使用将数组元素转换为所需形式的对象的函数来映射您的数组(如 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 。