真的,问题是如何用字符串填充和对象数据,但字符串到数组是微不足道的。
我需要最终得到一个对象:
myobject={"x":5,"y":6,"w":7,"h":8}
从字符串开始,因此:
var str = "5 6 7 8"
到目前为止,我的解决方案是
var myarray = str.split(' ');
var myobject = {
x : myarray[0],
y : myarray[1],
w : myarray[2],
h : myarray[3]
}
或
var myarray = str.split(' ');
var mynames = ['x','y',' w','h'];
for (var i = mynames.length - 1; i >= 0; i--) {
obj.[mynames[i]]=myarray[i]
}
想知道是否有更好的方式
答案 0 :(得分:2)
Array.prototype.reduce
是你的朋友:
var myarray = str.split(' ');
var mynames = ['x','y',' w','h'];
var obj = myarray.reduce((acc, curr, i) => {
acc[mynames[i]] = curr
return acc
}, {}) // => {"x":5,"y":6,"w":7,"h":8}
acc
是您的累加器对象(您的新输出),curr
(当前)是myarray
中的当前项。
这取决于您要拆分的字符串中的项目顺序,以及mynames
的顺序。
编辑:此解决方案与ES6和ES5兼容(如果您使用常规function(){}
作为回调而非箭头功能)。
答案 1 :(得分:2)
我会使用解构来将数字分配给变量,然后使用shorthand property names将它们分配给对象。
const str = "5 6 7 8";
const [x, y, w, h] = str.split(' ');
const obj = { x, y, w, h };
console.log(obj);
答案 2 :(得分:0)
一种选择是使用ES 6 destructuring。解构允许在单个语句中分配多个值。此外,spread 语法可用于将字符串传播到数组。
var outputObj = {x:'', y : '', w : '', h: ''};
var stringToConvert = "5678";
[outputObj.x, outputObj.y, outputObj.w, outputObj.h] = [...stringToConvert];
console.log(outputObj);