首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于嵌套对象值的排序数组

基于嵌套对象值的排序数组
EN

Stack Overflow用户
提问于 2020-12-19 01:41:57
回答 2查看 47关注 0票数 3

我正在尝试创建一个基于嵌套对象值对数组进行排序的函数。

代码语言:javascript
运行
复制
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,但我不知道如何为传入的适当路由参数动态生成索引。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-19 01:54:52

您可以找到顺序并将其作为排序的值。

代码语言:javascript
运行
复制
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'));
代码语言:javascript
运行
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 2
EN

Stack Overflow用户

发布于 2020-12-19 02:36:21

代码语言:javascript
运行
复制
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)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65361564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档