簡體   English   中英

使用鍵排序對象數組

[英]Sort Array of objects with keys

我正在嘗試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"}]

鑒於:

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的任何成員具有多個自己的屬性或者返回的第一個不是數字,則它可能無法按預期工作。

您需要使用比較器功能 這是按字符串排序的對象鍵。

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

嘗試這個 :

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

這個對我有用。

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;
}

暫無
暫無

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

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