[英]Convert array of objects into an object with only values (no index or keys)
我正在尝试将具有键值对的数组转换为仅包含数据(无键)的简单对象。
我有这样的数组...
[
0:{pos: 0, color: "#4a55e5"}
1:{pos: 0.2, color: "#206bcb"}
2:{pos: 0.4, color: "#edffff"}
3:{pos: 0.6, color: "#ffaa00"}
4:{pos: 0.8, color: "#000200"}
5:{pos: 1, color: "#000764"}
]
我需要将其转换为这样...
colorStops = {
0: "#4a55e5",
0.2: "#206bcb",
0.4: "#edffff",
0.6: "#ffaa00",
0.8: "#000200",
1: "#000764"
}
我想我需要遍历数组并以某种方式将值推入对象中...
colorStops = {};
for(var i=0; i<color.length; i++){
colorStops[i] = color[i].pos : color[i].color;
}
我仅包括此内容以更好地说明我想要什么。 当然,这是行不通的,并会导致错误。
更改此语句colorStops[i] = color[i].pos : color[i].color;
到colorStops[color[i].pos] = color[i].color;
var color = [ {pos: 0, color: "#4a55e5"}, {pos: 0.2, color: "#206bcb"}, {pos: 0.4, color: "#edffff"}, {pos: 0.6, color: "#ffaa00"}, {pos: 0.8, color: "#000200"}, {pos: 1, color: "#000764"} ]; colorStops = {}; for(var i=0; i<color.length; i++){ colorStops[color[i].pos] = color[i].color; } console.log(colorStops);
您可以使用array#reduce
和object#destructuring
创建对象。
var data = [ {pos: 0, color: "#4a55e5"}, {pos: 0.2, color: "#206bcb"}, {pos: 0.4, color: "#edffff"}, {pos: 0.6, color: "#ffaa00"}, {pos: 0.8, color: "#000200"}, {pos: 1, color: "#000764"} ]; var result = data.reduce((o,{pos, color}) => (o[pos] = color, o), {}); console.log(result);
这有效:
var colorStops = {}
for (var i = 0; i < color.length; i++) colorStops[color[i].pos] = color[i].color
将键值对分配给对象的语法为obj[key] = value
。 因此,更新后的代码应如下所示:
var color = [ {pos: 0, color: "#4a55e5"}, {pos: 0.2, color: "#206bcb"}, {pos: 0.4, color: "#edffff"}, {pos: 0.6, color: "#ffaa00"}, {pos: 0.8, color: "#000200"}, {pos: 1, color: "#000764"} ]; var colorStops = {}; for(var i=0; i<color.length; i++){ let key = color[i].pos; let value = color[i].color; colorStops[key] = value; } console.log(colorStops);
您可以像这样使用reduce
:
var obj = arr.reduce(function(res, o) {
res[o.pos] = o.color;
return res;
}, {});
可以缩短(使用ES6的箭头功能),以:
var obj = arr.reduce((res, o) => (res[o.pos]=o.color, res), {});
例:
var arr = [ {pos: 0, color: "#4a55e5"}, {pos: 0.2, color: "#206bcb"}, {pos: 0.4, color: "#edffff"}, {pos: 0.6, color: "#ffaa00"}, {pos: 0.8, color: "#000200"}, {pos: 1, color: "#000764"} ]; var obj = arr.reduce((res, o) => (res[o.pos]=o.color, res), {}); console.log(obj);
使用数组,map可以正常工作。
var colorStops = {};
var color = [
{pos: 0, color: "#4a55e5"},
{pos: 0.2, color: "#206bcb"},
{pos: 0.4, color: "#edffff"},
{pos: 0.6, color: "#ffaa00"},
{pos: 0.8, color: "#000200"},
{pos: 1, color: "#000764"}
];
color.map(function(value) {
colorStops[value.pos] = value.color;
})
如您所见,您使用括号表示法在colorStop对象内创建新属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.