我想知道有没有办法分割对象的键/值对并将它们插入到数组中,以便获得对象数组。
以下是代码:
gradesSpread
所以现在我想从Object.values()
获取键/值对并为每个创建对象并将其推入新数组。
我知道我可以使用Object.keys()
和let finalSpread = [{5:0},{6:4}...]
从对象获取键或值,但我不知道如何将这些键值对添加到对象数组中
为了更好的可视化,我需要数组看起来像这样:
{{1}}
我对所有解决方案都持开放态度,因此它不需要初始化对象。
答案 0 :(得分:3)
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});
});
答案 1 :(得分:2)
您可以使用值映射键。订单不反映对象的插入顺序。
var object = { 5: 1, 6: 3, 2: 4 },
result = Object
.keys(object)
.map(k => ({ [k]: object[k] }));
console.log(result);

答案 2 :(得分:1)
听起来像你想要Array.prototype.reduce()
。
let grades = [5,5,6,7,6,7,9,10,8,6];
let finalSpread = grades.reduce((spread, grade) => {
let count = spread[grade] || 0;
spread[grade] = ++count;
return spread;
}, {});
看到你想要一个基本上是键值映射的最终值,我建议finalSpread
作为上面的对象。
<强>更新强>
如果它是命令式,无论出于何种原因,它都是一个数组:
一个。在末尾添加finalSpread = Object.entries(finalSpread)
(注意:每个成绩实际上都是一个字符串)
湾只需重构reduce中的函数来检查它们的[grade,count]数组是否已经存在,并添加或递增它。
℃。使用Map而不是数组作为reduce accumulator(如果你需要等级也是数字 - 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()
的浏览器支持有限。)
答案 3 :(得分:0)
您也可以尝试:
let arrayOfObj = [];
let extractPairs = (jsonObj) => {
for(let item in jsonObj) {
console.log(item);
arrayOfObj.push({item: jsonObj[item]})
}
console.log(arrayOfObj);
}