【问题标题】:Transform Object to Array and sort [duplicate]将对象转换为数组并排序[重复]
【发布时间】:2019-11-16 16:18:54
【问题描述】:

我有一个 javascript 对象,如下所示:

{ john:32, elizabeth: 29, kevin: 30 }

这是一个有一些名字和年龄的对象。

如何将对象转换为数组并按年龄对数组进行排序?

我希望它类似于[{john:32}, {elizabeth:29}....]

【问题讨论】:

  • 你能举例说明你希望输出数组是什么样子吗?
  • 对不起,我想成为 [{john:32},{elizabeth:29}....]
  • 对不起 dev_junwen 但因为我是 js 新手,你能解释一下你的答案吗?
  • 你尝试过什么,到底有什么问题?

标签: javascript sorting transform


【解决方案1】:

我可能会使用Object.entries 将对象转换为数组,然后使用数组sort 方法进行排序,然后使用reduce 重新格式化数组。见下文。

const people = { john:32, elizabeth:29, kevin:30 };

const sorted = Object.entries(people).sort(
  (a, b) => a[1] - b[1]
).reduce((acc, [key, val]) => {
  acc.push({[key]: val});
  return acc;
}, []);

console.log(sorted);

【讨论】:

  • 你真是个天才。谢谢你。我真的很挣扎。我会支持你。
  • 没问题,乐于助人!
【解决方案2】:

1线解决方案

console.log( Object.values({john:32, elizabeth:29, kevin:30}).sort((a, b)=>a - b) )

如果你想要对象数组

const obj = { john: 32, elizabeth: 29, kevin: 30 }

console.log(
    Object.keys(obj)
    .map(key=>({[key]: obj[key]}))
)

【讨论】:

    【解决方案3】:

    您可以使用Array.reduce 循环遍历对象键来计算最终结果。

    let peopleObject = {john: 32, elizabeth: 29, kevin: 30};
    let result = Object.keys(peopleObject).reduce((rs, el) => {return [...rs, {[el]: peopleObject[el]}]; }, []).sort((a,b) =>Object.values(a)[0] - Object.values(b)[0])
    console.log(result);

    【讨论】:

      【解决方案4】:
      //declaration
      var myArray = [];
      var myObject = {john:32, elizabeth:29, kevin:30};
      
      //pushing the object in to an array
      for (var key in myObject) {
           myArray.push([key, myObject[key ]]);
      }
      
      //sorting function
      myArray.sort(function(a, b) {
         return a[1] - b[1];
      });
      
      //the above function returns the sorted array as
      //elizabeth,29,kevin,30,john,32
      
      
      //to create the sorted object from array
      var objSorted = {}
      myArray.forEach(function(item){
        objSorted[item[0]]=item[1]
      });
      
      //final output
      //{elizabeth: 29, john: 32, kevin: 30}
      

      【讨论】:

        【解决方案5】:

        这应该适用于您的情况

        var obj = { john:32, elizabeth:29, kevin:30 };
        
            var rs = Object.keys(obj).reduce((rs, el) => {let b= {}; b[el] = obj[el];rs.push(b); return rs; }, []).sort((a,b) =>Object.values(a)[0] - Object.values(b)[0])
            console.log(rs)

        【讨论】:

          猜你喜欢
          • 2021-10-02
          • 1970-01-01
          • 1970-01-01
          • 2017-08-11
          • 1970-01-01
          • 2021-11-04
          • 2019-07-14
          • 2016-05-22
          相关资源
          最近更新 更多