簡體   English   中英

如何使用不同的鍵對對象數組進行排序

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

為了使排序更可靠, .findname不是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.

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