像另一个数组一样按名称排序对象属性

时间:2014-05-20 07:50:41

标签: javascript arrays json sorting

如何使用另一个数组按名称对对象属性进行排序?

var json = '{"b":90,"c":42, "a":34}';
var obj = JSON.parse(json);

var sorting = ["a","b","c"];

我想订购 obj 属性,就像排序数组一样

谢谢

再见

6 个答案:

答案 0 :(得分:0)

var sorting = Object.keys(obj).sort();

答案 1 :(得分:0)

未订购Javascript对象。所以,你实际上无法对它们进行排序。

答案 2 :(得分:0)

为什么不迭代数组,然后访问obj属性?

for ( var i = 0; i < sorting.length; ++i ) {
  var current = obj[ sorting[ i ] ];
  // other stuff here...
}

如果您不打算迭代obj,请解释您的实际需求。

答案 3 :(得分:0)

  1. 将对象转换为数组

    var jsonArray = [];

    $。each(myObj,function(i,n){    jsonArray.push(N); });

  2. 排序数组

    var jsonArraySort = jsonArray.sort();

  3. 将数组转换为对象

    var jsonSort = {};  for(var i = 0; i&lt; jsonArraySort.length; i ++){    jsonSort [i] = jsonArraySort [i]; }

答案 4 :(得分:0)

您可以尝试以下方式:

var sorted = []
for (i = 0; i < sorting.length; i++) {
  if (json.hasOwnProperty(sorting[i])) {
    sorted.push(json[sorting[i]);        
  }
}

/* sorted will equal [34, 90, 42] */

答案 5 :(得分:0)

根据定义,您无法订购对象的键

  

ECMAScript对象是无序属性集合 ES3 Specs

     

枚举属性的机制和顺序(第一个算法中的步骤6.a,第二个算法中的步骤7.a)未指定。

     

枚举期间可以删除要枚举的对象的属性。如果删除枚举期间尚未访问的属性,则不会访问该属性。如果在枚举期间将新属性添加到要枚举的对象,则无法保证在活动枚举中访问新添加的属性。在任何枚举中不得多次访问属性名称。 ES5 Specs

如果你想要一个由你的对象键组成的排序数组,你可以使用[Object.keys] [4],得到它们的数组,然后你可以对它进行排序。

var obj = {b:90,c:42, a:34}
console.log (
      Object.keys (obj).sort ()
) // ["a","b","c"]

如果您对包含键和值的排序数组感兴趣,可以执行以下操作。

var obj = {b: 90, c: 42, a: 34},
    srt = Object.keys(obj).sort().map(function (prop) {
              return {
                  key: prop,
                  value: obj[prop]
              }
          });

console.log(srt) //[{"key":"a","value":34},{"key":"b","value":90},{"key":"c","value":42}]