在javascript中对对象的关联数组进行排序 [英] Sorting associative array of objects in javascript

查看:93
本文介绍了在javascript中对对象的关联数组进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在js中有一个特定的对象数组,它们代表一个表的列. 我的对象是:

I have a particular array of objects in js that represent columns of a table. My object is:

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"对对象进行排序,但是要使用

I have to order the object by "displayOrder", but using a function like

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

很明显,它返回一个错误. 我该怎么做?

obviously it return an error. How i can do this?

推荐答案

由于Array.prototype方法(

You may use .sort only on arrays due to it is Array.prototype method (MDN). So as an easiest solution I would preffer to reform your columns data from object to array:

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以编程方式完成:


This transformation (from object to array) could be done programmatically via 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()方法.

Here the columns is your initial object. With the help of Object.keys() and .map() I turn it into the array I described before, so the .sort() method could be called in a chain.

这篇关于在javascript中对对象的关联数组进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆