将对象转换为对象数组?

11

我有一个长这样的对象:

{
  "1": "Technology",
  "2": "Startup",
  "3": "IT",
}

我需要将它转换为一个对象数组,该数组应如下所示:

[
  {id: 1, name: "Technology"},
  {id: 2, name: "Startup"},
  {id: 3, name: "IT"}
]

如何最清洁和高效地完成此操作?


@OwaisAslam,这绝对不是那个问题的副本。两者都涉及到映射对象和数组以及类似的工具,但它们的起始和结束形状非常不同。 - KyleMit
@KyleMit 我说了什么? - Owais Aslam
哦,那只是一个重复的建议 - 对于缺乏上下文表示抱歉 - 我还标记了该评论为不再必要(对作者没有任何惩罚),所以我猜它已经被删除了 - 我会删除这个和我的原始评论。 - KyleMit
5个回答

19
你可以使用 .map()Object.keys()

let data = {
    "1": "Technology",
    "2": "Startup",
    "3": "IT",
};

let result = Object.keys(data)
                   .map(key => ({id: Number(key), name: data[key]}));

console.log(result);

有用的资源:


1
我真的需要在使用 .map() 上变得更加熟练!谢谢 :) - Sandra Willford
1
谢谢Mohammad添加资源。#teachamantofish帮助我解决了自己的问题。 - Sankofa

3
假设您的对象实例名为obj
Object.keys(obj).reduce((acc, curr) => {
    return [...acc, { id: curr, name: obj[curr] }]
}, [])

1

现在你可以使用Object.entries()将一个对象转换为键值对数组(也存储为数组)。

这使我们能够利用数组解构,因此我们可以将其变成一个漂亮的一行代码:

const obj = {
  "1": "Technology",
  "2": "Startup",
  "3": "IT",
};

const result = Object.entries(obj).map(([id, name]) => ({id: +id, name}));

console.log(result);

添加一个一元加号(+)将id(字符串)转换为数字。


1

平凡的方法

var o = {
    "1": "Technology",
    "2": "Startup",
    "3": "IT",
};
var arr = [];
for(var i in o) {
    arr.push({
        id: i,
        number: o[i]
    });
};

0

const words = {
  told: 64,
  mistake: 11,
  thought: 16,
  bad: 17
}

const results = []

Object.entries(words).map(val => results.push({
  text: val[0],
  value: val[1]
}))

console.log(results)


1
“map”方法用于从当前值中投影新值并返回结果。你应该使用.forEach()代替。 - zhulien
你能详细解释一下为什么应该使用forEach而不是map方法吗? - sandeep sharma

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