使用键排序对象数组

时间:2014-07-08 10:19:01

标签: javascript arrays sorting

我正在尝试javascript中的所有知识。有没有办法根据密钥对此进行排序?

var myObj =[{"2":"installation.diagnostics.status"},{"4":"installation.diagnostics.status"},{"3":"installation.diagnostics.status"}];

这是我的代码!!

var result=JSON.stringify(navMenu);

eval('var obj='+result);

console.log(obj);
Object.keys(obj)
      .sort()
      .forEach(function (k) {
         console.log(obj[k]);
      });

var myObj =[{"2":"installation.diagnostics.status"},{"3":"installation.diagnostics.status"},{"4":"installation.diagnostics.status"}]

4 个答案:

答案 0 :(得分:2)

假设:

var myObj =[{"2":"installation.diagnostics.status"},{"4":"installation.diagnostics.status"},{"3":"installation.diagnostics.status"}];

您可以使用以下方式对其进行排序:

myObj.sort(function(a, b){return Object.keys(a)[0] - Object.keys(b)[0]});

您可能需要Object.keys的polyfill来支持旧版浏览器。

请注意,这会将第一个返回的属性名称排序为数字。如果 myObj 的任何成员拥有多个自己的属性,或者第一个返回的数字不是数字,则可能无法按预期工作。

答案 1 :(得分:1)

您需要使用comparator function。这是按字符串排序的对象键。

function compare(a, b) {
  var ak = Object.keys(a)[0];
  var bk = Object.keys(b)[0];
  if (ak < bk) return -1;
  if (ak > bk) return 1;
  return 0;
}

myObj.sort(compare);

DEMO

答案 2 :(得分:0)

试试这个:

 (function (s) {
    var t = {};
    Object.keys(s).sort().forEach(function (k) {
        t[k] = s[k]
    });
    return t
})(myObj)

它对我有用。

答案 3 :(得分:0)

function sortArrayOfObjectsByKey(array, key, order){
    // can sort forward or in reverse - can be passed as integer or string
    // if order not passed in, defaults to 1 (forward)
    order = !order ? 1 : order;

    if (order === -1 || order.toString().toLowerCase() === "reverse"){
        array.sort(function(first, second) {
            if (first[key] < second[key]) { return 1; }
            else if (first[key] > second[key]) { return -1; }
            return 0;
        });
    }
    else {
        array.sort(function(first, second) {
            if (first[key] < second[key]) { return -1; }
            else if (first[key] > second[key]) { return 1; }
            return 0;
        });
    }
    return array;
}