使用用户定义的排序顺序迭代对象

时间:2015-05-21 17:15:10

标签: javascript object

var myobject = [
        "A" : {
            color: "red",
            ordering: "3",
              },
        "B" : {
            color: "green",
            ordering: "1",
              },
        "C" : {
            color: "green",
            ordering: "2",
              }
     ];

想象一下,我有一个多维对象,如上所述。如果我使用for-in循环迭代这个对象,我可能会按顺序A,B,C得到它们(但这不能保证)。但是,如果我想按照“订购”属性给出的顺序处理它们呢?即使它们以B,C,A的顺序返回。有没有办法在JavaScript中执行此操作(jquery解决方案也很好)。

1 个答案:

答案 0 :(得分:3)

  1. 首先,您需要确保您的JSON在语法上是正确的。对象使用大括号({}),而非括号([])。

  2. 接下来,您需要将对象转换为元组,以便对它们进行排序。

  3. 最后,定义排序功能。提供的一个仅适用于名义上的情况,因此您必须添加自己的逻辑来处理名义上和意外情况。

  4. 代码

    var myobject = {
      "A" : {
        color : "red",
        ordering : "3",
      },
      "B" : {
        color : "green",
        ordering : "1",
      },
      "C" : {
        color : "green",
        ordering : "2",
      }
    };
    
    // Convert object to array of tuples.
    function objToTuples(obj) {
      return Object.keys(obj).map(function(key) {
       return [key, obj[key]]; 
      });
    }
    
    // Sorting function to sort tuples by ordering.
    function sortByOrdering(a, b) {
      var o1 = a[1]['ordering'];
      var o2 = b[1]['ordering'];
      
      return o1 > o2 ? 1 : o2 > o1 ? -1 : 0;
    }
    
    console.log(JSON.stringify(objToTuples(myobject).sort(sortByOrdering), null, '  '));

    输出

    [
      [
        "B",
        {
          "color": "green",
          "ordering": "1"
        }
      ],
      [
        "C",
        {
          "color": "green",
          "ordering": "2"
        }
      ],
      [
        "A",
        {
          "color": "red",
          "ordering": "3"
        }
      ]
    ]