我想知道如何通过拆分值将数组转换为对象?
var obj = {
id: '',
val: ''
}
我的意思是 - 如果我有像
这样的数组 ["abc12", "abc1", "def12", "abc454"]
我如何split
关闭前3个值 - 所以它最终像对象一样:
{id: 'abc', val: 12}, {id: 'abc', val: 1} ...
答案 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)
};
});
Ps:您可能需要小心并检查map
原型链中是否存在Array
方法,因为较旧的浏览器可能没有实现此方法。这是一个解释如何涵盖此浏览器不兼容性的链接:http://www.tutorialspoint.com/javascript/array_map.htm。