【问题标题】:Sorting object properties based on value [duplicate]根据值对对象属性进行排序[重复]
【发布时间】:2017-04-06 16:57:39
【问题描述】:

我有一个对象数组:

[  
   {  
      "Accept Credit Cards":"17",
      "Take-Out":"17",
      "Alcohol":"16",
      "Caters":"10",
      "Takes Reservations":"11",
      "Smoking":"0",
      "Dogs Allowed":"1",
      "Outdoor Seating":"12",
      "Coat Check":"0",
      "Waiter Service":"14",
      "Wi-Fi":"10",
      "Good For Groups":"16",
      "Wheelchair Accessible":"13"
   }
]

我想根据值对其进行排序。所以我的结果应该是这样的:

[  
       {  
          "Accept Credit Cards":"17",
          "Take-Out":"17",
          "Alcohol":"16",
          "Good For Groups":"16",
          "Wheelchair Accessible":"13"
          AND SO ON.....

      }
]

我将如何做到这一点?我尝试了一种。但这只是根据密钥进行排序。任何指针表示赞赏。

【问题讨论】:

  • 使用 hasOwnProperty 遍历您的对象:developer.mozilla.org/nl/docs/Web/JavaScript/Reference/…
  • 对象没有顺序,你问的没有意义。
  • 排序对象的目的是什么? Javascript 不关心对象属性的顺序;顺序可能因实施而异。
  • @GetOffMyLawn 不是重复的,虽然相关。
  • 我和@RyanZim 一起讨论这个问题。如果要排序,它应该是一个数组。对象的属性顺序无关紧要。

标签: javascript


【解决方案1】:

正如 RyanZim 在 cmets 中提到的那样,对对象的属性进行排序并没有真正的目的。 JavaScript 不保证属性的顺序,所以你不应该依赖它们是有序的。但是,您可以创建一个属性数组并根据对象中的值对它们进行排序。

const arr = [  
   {  
      "Accept Credit Cards":"17",
      "Take-Out":"17",
      "Alcohol":"16",
      "Caters":"10",
      "Takes Reservations":"11",
      "Smoking":"0",
      "Dogs Allowed":"1",
      "Outdoor Seating":"12",
      "Coat Check":"0",
      "Waiter Service":"14",
      "Wi-Fi":"10",
      "Good For Groups":"16",
      "Wheelchair Accessible":"13"
   }
];

const sorted = Object.keys(arr[0]).sort((a, b) => arr[0][b] - arr[0][a]);

sorted.forEach(x => console.log(x + ': ' + arr[0][x]));

如果您想要更高级并按值排序,请按字母顺序:

const arr = [  
   {  
      "Accept Credit Cards":"17",
      "Take-Out":"17",
      "Alcohol":"16",
      "Caters":"10",
      "Takes Reservations":"11",
      "Smoking":"0",
      "Dogs Allowed":"1",
      "Outdoor Seating":"12",
      "Coat Check":"0",
      "Waiter Service":"14",
      "Wi-Fi":"10",
      "Good For Groups":"16",
      "Wheelchair Accessible":"13"
   }
];

const sorted = Object.keys(arr[0]).sort((a, b) => {
  if (arr[0][a] > arr[0][b]) return -1;
  if (arr[0][a] < arr[0][b]) return 1;
  if (a > b) return 1;
  if (a < b) return -1;
  return 0;
});

sorted.forEach(x => console.log(x + ': ' + arr[0][x]));

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 2017-07-18
    • 2017-09-06
    • 2021-07-14
    • 2020-09-22
    • 2012-10-22
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多