[英]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.