簡體   English   中英

在javascript中對對象的關聯數組進行排序

[英]Sorting associative array of objects in javascript

我在js中有代表表列的特定對象數組。 我的對象是:

var columns = {
  "image": {
    "show": false,
    "orderable": true,
    "value": 0,
    "displayOrder":2
  },
  "name": {
    "show": true,
    "orderable": true,
    "value": 1,
    "displayOrder":0
  },
  "company": {
    "show": false,
    "orderable": false,
    "value": 2,
    "displayOrder":1
  }
}

我必須通過“ displayOrder”對對象進行排序,但是要使用類似

columns.sort(function(a, b) {
  return parseFloat(a.displayOrder) - parseFloat(b.displayOrder); 
});

顯然,它返回一個錯誤。 我該怎么做?

您只能在數組上使用.sort ,因為它是Array.prototype方法( MDN )。 因此,作為最簡單的解決方案,我希望將columns數據從對象轉換為數組:

var columnList = [
    {
      "key": "image",
      "value": {
          "show": false,
          "orderable": true,
          "value": 0,
          "displayOrder":2
      }
    },
    {
      "key": "name",
      "value": {
          "show": true,
          "orderable": true,
          "value": 1,
          "displayOrder":0
      } 
    },
    {
      "key": "company",
      "value": {
          "show": false,
          "orderable": false,
          "value": 2,
          "displayOrder":1
      } 
    }
];

var result = columnList.sort(function(a, b) {
    return parseFloat(a.value.displayOrder) - parseFloat(b.value.displayOrder);  
});

console.log(result);

console.log的結果將完全相同

0:{key: "name", value: {…}}
1:{key: "company", value: {…}}
2:{key: "image", value: {…}}

這種轉換(從objectarray )可以通過Object.keys以編程方式完成:

result = Object.keys(columns)
  .map(c => ({ key: c, value: columns[c]}))
  .sort((a, b) => a.value.displayOrder - b.value.displayOrder)

在這里, columns是您的初始對象。 Object.keys().map()的幫助下,我將其轉換為前面描述的數組,因此可以在鏈中調用.sort()方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM