[英]how to sort an array of objects with different keys
我正在嘗試通過特定位置的鍵對對象數組進行排序。 唯一的問題是每個對象都有不同的鍵名。
這是我要排序的對象的示例:
let data = [
{name: "James", x: 3, },
{name: "Thomas", y: 1},
{name: "Zack", z: 2}
];
我正在嘗試按第二個鍵對其進行排序,因此順序應為
[
{name: "James", x: 3, },
{name: "Zack", z: 2},
{name: "Thomas", y: 1}
];
這是我要嘗試的方法:
let data = [
{name: "James", x: 3, },
{name: "Thomas", y: 1},
{name: "Zack", z: 2}
];
data.sort((a, b) => {
let key1 = Object.keys(a)[1];
let key2 = Object.keys(b)[1];
return a[key1] > b[key2]
});
console.log(data)
這是我的jsbin
https://jsbin.com/lihefodoni/edit?html,js,console
不知道為什么它不起作用。 我正在嘗試在我的React Application中執行此操作,所以我不知道是否需要做些其他事情?
.sort
回調期望一個數字作為返回值,而不是布爾值(因為<
運算符將求和)。 而是返回數值差:
let data = [ {name: "James", x: 3, }, {name: "Thomas", y: 1}, {name: "Zack", z: 2} ]; data.sort((a, b) => { let key1 = Object.keys(a)[1]; let key2 = Object.keys(b)[1]; return b[key2] - a[key1] }); console.log(data)
為了使排序更可靠, .find
鍵name
不是name
的條目:
let data = [ {name: "James", x: 3, }, {name: "Thomas", y: 1}, {name: "Zack", z: 2} ]; data.sort((a, b) => { const aEntry = Object.entries(a).find(([key]) => key !== 'name'); const bEntry = Object.entries(b).find(([key]) => key !== 'name'); return bEntry[1] - aEntry[1]; }); console.log(data)
您可以排除不需要的鍵並獲取對象的值。 它通過獲取沒有索引的唯一項目來工作。
let data = [{ name: "James", x: 3 }, { name: "Thomas", y: 1 }, { name: "Zack", z: 2 }]; data.sort(({ name, ...a }, { name: _, ...b }) => Object.values(b) - Object.values(a)); console.log(data)
.as-console-wrapper { max-height: 100% !important; top: 0; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.