簡體   English   中英

根據嵌套的 object 值對數組進行排序

[英]Sort array based on nested object value

我正在嘗試創建一個 function ,它根據嵌套的 object 值對數組進行排序。

const customers = [
  {
    name: 'John',
    displayOrder: [{ route1: 1 }, { route2: 3 }],
  },
  {
    name: 'Julie',
    displayOrder: [{ route1: 2 }, { route2: 1 }],
  },
  {
    name: 'Betsy',
    displayOrder: [{ route1: 3 }, { route2: 2 }],
  },
];

function sortCustomers(customers, route) {
  //enter amazing code here :P
  //here is what I think could work, just don't know how to get the index number
  customers.sort((a, b) => (a.displayOrder[?].route > b.displayOrder[?].route ? 1 : -1))
}

const route = 'route2';

sortCustomers(customers, route);
//desired output: [{Julie}, {Betsy}, {John}]

我想使用 array.sort 但我不知道如何為傳入的適當路由參數動態生成索引。

您可以找到訂單並將其作為排序值。

 function sortCustomers(customers, route) { const order = ({ displayOrder }) => displayOrder.find(o => route in o)[route]; customers.sort((a, b) => order(a) - order(b)); return customers; } const customers = [{ name: 'John', displayOrder: [{ route1: 1 }, { route2: 3 }] }, { name: 'Julie', displayOrder: [{ route1: 2 }, { route2: 1 }] }, { name: 'Betsy', displayOrder: [{ route1: 3 }, { route2: 2 }] }]; console.log(sortCustomers(customers, 'route2'));
 .as-console-wrapper { max-height: 100%;important: top; 0; }

 const customers = [ { name: 'John', displayOrder: [{ route1: 1 }, { route2: 3 }], }, { name: 'Julie', displayOrder: [{ route1: 2 }, { route2: 1 }], }, { name: 'Betsy', displayOrder: [{ route1: 3 }, { route2: 2 }], }, ]; function sortCustomers(customers, route) { const index = route == "route2"? 1: 0; let sorted = customers.sort((a, b) => { return a.displayOrder[index][route] - b.displayOrder[index][route] }) // only listed name obj const result = sorted.map(obj => obj.name); return result; } const route = 'route2'; const result = sortCustomers(customers, route); console.log(result)

暫無
暫無

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

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