我希望你能够协助我将这样的一个数据结构进行转换:
data = {
0:{A:a},
1:{B:b},
2:{C:c},
}
转换为这样的结构:
[
{0:{A:a}},
{1:{B:b}},
{2:{C:c}},
]
使用扩展运算符的方式如下:[...data]
,将返回一个空数组。
我也尝试了 [{...data}]
是否有一种方法可以使用扩展运算符来获得所需的结果?此外,为什么这种方法不起作用?
我希望你能够协助我将这样的一个数据结构进行转换:
data = {
0:{A:a},
1:{B:b},
2:{C:c},
}
转换为这样的结构:
[
{0:{A:a}},
{1:{B:b}},
{2:{C:c}},
]
使用扩展运算符的方式如下:[...data]
,将返回一个空数组。
我也尝试了 [{...data}]
是否有一种方法可以使用扩展运算符来获得所需的结果?此外,为什么这种方法不起作用?
"是否有办法使用扩展运算符获得所需的结果?" 简短回答,没有。(请参见下面的替代解决方案)
"另外,为什么这种方法不起作用?"
它不起作用是因为根据MDN文档
"ECMAScript提案中的Rest / Spread属性(stage 3)将扩展属性添加到对象文字。它将提供的对象的自有可枚举属性复制到新对象中。"
就像文档所说的那样,根据“Rest/Spread Properties proposal”,您无法将对象属性展开到数组上,对象总是会将它们的属性展开到一个新对象上。同样,数组也不能展开到对象上,它们只能展开到新数组上。
替代解决方案:
You can do this fairly easily with Object.keys().map()
. Object.keys()
will get an array of the keys of the object, and Array.map()
will map them into an array of the desired structure, like so:
var data = {
0:{A:"a"},
1:{B:"b"},
2:{C:"c"},
}
var result = Object.keys(data).map(function (key) {
return { [key]: data[key] };
});
console.log(result);
const data = {
0:{A: 'a'},
1:{B: 'b'},
2:{C: 'c'}
};
const result = Object.entries(data).map(([key, value]) => ({ [key]: value }));
console.log(result);
reduce
来输出所需的结果。
data = {
0:{A:'a'},
1:{B:'b'},
2:{C:'c'},
}
let resArr = Object.keys(data).reduce((arr, e) => {
arr.push({[e]: data[e]});
return arr;
}, []);
console.log(resArr);
arr.push({ [e]: data[e] });
- mhodges让数据等于 ['乌兹别克斯坦西拉', '希克马特贝特', '阿斯拉姆博伊']
让 spread 等于 [...data]
console.log(spread)