我有以下对象:
{English: 4, Math: 5, CompSci: 6}
我该如何将其转换为对象数组,例如:
[{English: 4}, {Math: 5}, {CompSci: 6}]
找不到答案。谢谢!!
我有以下对象:
{English: 4, Math: 5, CompSci: 6}
我该如何将其转换为对象数组,例如:
[{English: 4}, {Math: 5}, {CompSci: 6}]
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);
通过使用更新的JS,你可以使用Object.entries
并映射单个属性。
var object = { English: 4, Math: 5, CompSci: 6 },
array = Object.entries(object).map(([k, v]) => ({ [k]: v }));
console.log(array);
只需循环遍历对象中的每个键。
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)
你可以直接使用 {}
分配对象,但如果不使用 []
引用键值,则无法正常工作。
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);
您可以使用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)))
您可以使用 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);
object
结构应该是{subject:SUBJECT_NAME, code:SUBJECT_CODE}
。 - Rayon