将JavaScript对象转换为单个对象的数组

6

我有以下对象:

{English: 4, Math: 5, CompSci: 6}

我该如何将其转换为对象数组,例如:

[{English: 4}, {Math: 5}, {CompSci: 6}]

找不到答案。谢谢!!

3
展示一下你所尝试的,你遇到的一些问题(具体的问题),我们很乐意提供帮助。 - Andrew Li
要补充一下 @AndrewL 说的,你需要先展示出你尝试过什么。将你失败的代码展示给我们,我们会帮助你找出失败的原因以及如何解决你的问题。 - amallard
1
你为什么想要这样做?而且,这几乎是 将对象转换为对象数组 的重复。 - Felix Kling
更加合理/有用的object结构应该是{subject:SUBJECT_NAME, code:SUBJECT_CODE} - Rayon
6个回答

11
使用 Array#forEach 而不是 Object.keys(YOUR_OBJECT)

var input = {
  English: 4,
  Math: 5,
  CompSci: 6
};
var op = [];
Object.keys(input).forEach(function(key) {
  var obj = {};
  obj[key] = input[key];
  op.push(obj); //push newly created object in `op`array
});
console.log(op);


1
很好的回答,只是不喜欢提问者要求别人喂食的事实。 - Andrew Li
谢谢Rayon。昨晚花了三个小时,最好的结果就是制作了嵌套数组。干杯! - dc0087

7

通过使用更新的JS,你可以使用Object.entries并映射单个属性。

var object = { English: 4, Math: 5, CompSci: 6 },
    array = Object.entries(object).map(([k, v]) => ({ [k]: v }));

console.log(array);


2

只需循环遍历对象中的每个键。

var oldObject = {English: 4, Math: 5, CompSci: 6};
var newArray = [];

// Loop over each key in the object
for (var key in oldObject) {
    // Create a temp object
    var temp = {};
    
    // Set the key of temp
    temp[key] = oldObject[key]

    // Push it to the array
    newArray.push(temp);
}

console.log(newArray)


0

你可以直接使用 {} 分配对象,但如果不使用 [] 引用键值,则无法正常工作。

 var obj = {English: 4, Math: 5, CompSci: 6};
 var n_obj = [];
 for(var i in obj){
    n_obj.push({[i]:obj[i]});
 }
 console.log(n_obj);

0

您可以使用Object.entries将对象转换为键值对数组,然后将此数组映射到每个单独键值对创建的较小对象上,使用Object.fromEntries(这里的关键部分是在传递给fromEntries之前将其包装在另一个数组中的键部分):

Object.entries(obj).map(e => Object.fromEntries([e]))

反过来也类似:我们使用 Object.fromEntries 创建一个大对象,然后传入一个由键值对数组组成的数组。这个数组是通过将对象数组扁平化映射(即消除多余的数组层级)而得到的,我们从每个小对象调用 Object.entries 获取其键值对数组。关键在于这里的扁平映射,如果没有它,我们会得到一个键值对数组的数组,因为在另一种转换中,我们添加了额外的层级来分离属性。

Object.fromEntries(arr.flatMap(o => Object.entries(o)))

-1

您可以使用 JSON.stringify()String.prototype.match()RegExp /".*"\:.*(?=,|})/String.prototype.split()RegExp /,/Array.prototype.join() 参数为 "},{"JSON.parse()

var obj = {English: 4, Math: 5, CompSci: 6};
var res = JSON.parse("[{" 
          + JSON.stringify(obj)
            .match(/".*"\:.*(?=,|})/g)[0]
            .split(/,/)
            .join("},{") 
          + "}]");
console.log(res);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接