Javascript 将对象键/值对拆分为单独的对象

Javascript 将对象键/值对拆分为单独的对象,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我想知道是否有一种方法可以拆分对象的键/值对,并将它们插入数组中,从而得到对象数组 代码如下: let grades=[5,5,6,7,6,7,9,10,8,6] 让gradesSpread={ 5:0, 6:0, 7:0, 8:0, 9:0, 10:0 } //这将按预期填充对象 for(让[index,grade]在grades.entries()中){ 年级扩展[年级]++ } 所以现在我想从gradesSpread中获取键/值对,并为每个键/值对创建对象,并将其推送到新数组中 我知道我

我想知道是否有一种方法可以拆分对象的键/值对,并将它们插入数组中,从而得到对象数组

代码如下:

let grades=[5,5,6,7,6,7,9,10,8,6]
让gradesSpread={
5:0,
6:0,
7:0,
8:0,
9:0,
10:0
}
//这将按预期填充对象
for(让[index,grade]在grades.entries()中){
年级扩展[年级]++
}
所以现在我想从
gradesSpread
中获取键/值对,并为每个键/值对创建对象,并将其推送到新数组中

我知道我可以使用
Object.values()
Object.keys()
从对象中获取键或值,但我不知道如何将这些键值对添加到对象数组中

为了获得更好的可视化效果,我需要数组如下所示:

let finalSpread = [{5:0},{6:4}...]
我对所有的解决方案都持开放态度,因为这样就不需要初始化对象了

var arr = [];
Object.keys(grades).forEach((key) => {
    var newObj = {};
    newObj[key] = grades[key];
    arr.push(newObj);
});
使用ES6可能会更短:

var arr = [];
Object.keys(grades).forEach((key) => {
    arr.push({[key]: grades[key});
});

您可以将键与值映射。该顺序不反映对象的插入顺序

var object={5:1,6:3,2:4},
结果=对象
.keys(对象)
.map(k=>({[k]:对象[k]}));
控制台日志(结果)听起来像你想要的

鉴于您需要的最终值本质上是键值的映射,我建议将
finalSpread
作为上述对象



更新:

var arr = [];
Object.keys(grades).forEach((key) => {
    arr.push({[key]: grades[key});
});
如果出于任何原因,它必须是一个数组,您可以:

a。在末尾添加
finalSpread=Object.entries(finalSpread)
(注意:每个等级实际上是一个字符串)

b。只需在reduce中重构函数,检查[grade,count]数组是否已经存在,然后添加或增加它

c。使用一个而不是一个数组作为reduce累加器(如果您需要分数也是数字-Map允许非字符串键),然后将其强制转换为一个数组,即:

let finalSpread = grades.reduce((spread, grade) => {
  let count = spread.get(grade) || 0;
  spread.set(grade, ++count);
  return spread;
}, new Map());
finalSpread = Array.from(finalSpread);
(注意:
map
Array.from()
的浏览器支持有限。)

您也可以尝试:

let arrayOfObj = [];
let extractPairs = (jsonObj) => {
for(let item in jsonObj) {
    console.log(item);
    arrayOfObj.push({item: jsonObj[item]})
}
console.log(arrayOfObj);
}

这是一个例子,而不是问题中数据的反映。grades数组是如何使用的?@zer00ne我修正了它是一个输入错误。获取键,但不是相应键的值。o[key]是值,我将它改为grades[key][为了让它更清晰,我想知道为什么我一个小时都不能映射对象,忘记了你可以映射数组而不是对象。感谢这是一个非常简洁的解决方案,我可以问你如何按照键值对最终数组进行排序吗?你需要什么顺序?降序或升序都可以。顺序实际上是升序,beca使用默认排序的整数对象键(在实际的javascript中)。实际上使用
Map
作为累加器的起始值是非常棒的。它解决了大量问题。