将对象转换为键值对对象数组,例如 `{ name: "Apple", value: "0.6" }`。

13

我有一个像这样的对象:

const total = {
    "Apple": 0.6,
    "Banana": 0.6,
    "Orange": 1,
    "Grapes": 0.4,
    "Pineapple": 0.4
  };

现在我想将它转换成一个键值对对象的数组,每个对象都有相同的两个属性"name""value",分别保存原始对象的每个属性的键和值:

[
  { "name": "Apple", "value": 0.6 },
  { "name": "Banana", "value": 0.6 },
  { "name": "Orange", "value": 1 },
  { "name": "Grapes", "value": 0.4 },
  { "name": "Pineapple", "value": 0.4 }
]

如果你正在寻找这个的反向操作:如何在JavaScript中将对象数组转换为一个对象? - Sebastian Simon
3个回答

30
你可以在对象键上使用Array#map函数,并创建具有所需形状的对象。

const total = { 
    'Apple': 0.6,
    'Banana': 0.6,
    'Orange': 1,
    'Grapes': 0.4,
    'Pineapple': 0.4 
};
              
const array = Object.keys(total)
                    .map(key => ({ name: key, value: total[key] }))
                    .sort((f, s) => f.value - s.value);

console.log(array);

如果您使用ES7或更高版本,则可以将Object#keys替换为Object#entries。还可以在参数列表中使用对象解构来分别获取namevalue

const total = { 
    'Apple': 0.6,
    'Banana': 0.6,
    'Orange': 1,
    'Grapes': 0.4,
    'Pineapple': 0.4 
};
              
const array = Object.entries(total)
                    .map(([name, value]) => ({ name, value }))
                    .sort((f, s) => f.value - s.value);;

console.log(array);


1
真的很棒,而且速度非常快。现在,如果我想按降序格式获得结果,我该如何实现呢? - Iron_Man
你需要在链中添加 sort 函数。 - Suren Srapyan

7
 const result = Object.entries(total).map(([name, value]) => ({name, value}));

13
适当的解释可以起到很大的作用。 - cs95

0

Array#reduce也可以用于“以键值格式在数组中插入对象”:

var total = { 'Apple': 0.6, 'Banana': 0.6, 'Orange': 1, 'Grapes': 0.4, 'Pineapple': 0.4 };

var objArr = Object.entries(total)
                   .reduce((accumulator, [name, value]) => {
                      return accumulator.concat({name: name, value: value});  // creates an array of objects
                     }, [])
                   .sort((a, b) => b.value - a.value);  // sorting in descending order

console.log(objArr);

了解更多信息,请查看 Object#entriesArray#sort对象解构


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