簡體   English   中英

按其值對對象數組中的每個對象進行排序

[英]Sort each Object inside Array of Objects by its values

我在下面有這個函數來根據它們的值對對象的鍵進行排序。

var obj = {"A": 50, "B": 10, "C": 150 };

var ordered = Object.keys(obj).sort(function(a,b) {
            return obj[a] > obj[b] ? -1 :
                   obj[b] > obj[a] ? 1 : 0;
        });

console.log(ordered); // => [C, A, B];

但是,當我有一個對象數組時,此函數不返回任何內容。

對於如下所示的對象數組:

var objs = [
    {"A": 50, "B": 10, "C": 150 },
    {"A": 60, "B": 100, "C": 10 },
    {"A": 150, "B": 100, "C": 30 } 
]

我試過這樣的事情:

let op =[];
objs.forEach((obj) => {
    let ordered = {};
     Object.keys(obj).sort().forEach((a,b) => {
      ordered = obj[a] > obj[b] ? -1 : obj[b] > obj[a] ? 1 : 0;
    });
  op.push(ordered);
});

console.log(op);

但是這個函數返回一個錯誤:標識符'op'已經被聲明。

我需要返回類似於上面示例的內容,但適用於每個對象。 結果將是:

console.log(ordered); // => [[C, A, B], [B, A, C], [A, B, C]]

無法重現您描述的錯誤,但這是另一種方法,使用Object.entries()和一些解構

 const objs = [ {"A": 50, "B": 10, "C": 150 }, {"A": 60, "B": 100, "C": 10 }, {"A": 150, "B": 100, "C": 30 } ]; const ordered = objs.map(o => Object.entries(o) .sort(([k1, v1], [k2, v2]) => v2 - v1) .map(([k]) => k)); console.log(ordered);

在您的代碼中,您將排序邏輯放在forEach ,這將不起作用。 由於您已經有一個適合您的排序,為了獲得您想要的輸出,您可以將它設為一個函數並將其map到數組上:

 function ordered(obj) { return Object.keys(obj).sort(function(a, b) { return obj[a] > obj[b] ? -1 : obj[b] > obj[a] ? 1 : 0; }); } var objs = [ {"A": 50, "B": 10, "C": 150 }, {"A": 60, "B": 100, "C": 10 }, {"A": 150, "B": 100, "C": 30 } ] console.log(objs.map(ordered))

如果您更喜歡forEach代碼,您只需要進行一些更改:

 var objs = [ {"A": 50, "B": 10, "C": 150 }, {"A": 60, "B": 100, "C": 10 }, {"A": 150, "B": 100, "C": 30 } ] let op =[]; objs.forEach((obj) => { // just on forEach let ordered = Object.keys(obj).sort((a, b) => obj[a] > obj[b] ? -1 : obj[b] > obj[a] ? 1 : 0 // sort ) op.push(ordered); // push sorted array }); console.log(op);

暫無
暫無

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

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