【问题标题】:Sorting of array of object with multiple key values [duplicate]对具有多个键值的对象数组进行排序[重复]
【发布时间】:2021-02-15 10:28:51
【问题描述】:
const users = [
  { 'user': 'fred' },
  { 'user': 'barney', 'age': 36 },
  { 'user': 'fred',   'age': 40 },
  { 'user': 'barney', 'age': 34 },
  { 'user': 'arney', 'age': 36 },
  { 'user': 'ared' },
];

---------------预期输出------------

const sortedArray = [ {age: 34, user: "barney"}, 
                      {age: 36, user: "arney"},
                      {age: 36, user: "barney"},
                      {age: 40, user: "fred"},
                      {user: "ared"},
                      {user: "fred"},
                     ];
    
  • 应该按年龄排序!
  • 如果年龄相等,则根据用户键进行排序。
  • 如果年龄键不可用,则应最后插入这些对象。

【问题讨论】:

  • 不,它没有像我预期的那样工作
  • users.sort((a, b) => { if (a.age || b.age) { return a.age - b.age; } return a.user > b.user ? 1 : -1; });
  • 请在问题中包含此内容作为编辑。谢谢。

标签: javascript arrays reactjs typescript sorting


【解决方案1】:

简单的比较功能就可以完成这项工作。首先按年龄比较,如果相等则按用户进行比较,如果年龄不可用,则将其放在最后。

const users = [
  { user: 'fred' },
  { user: 'barney', age: 36 },
  { user: 'fred', age: 40 },
  { user: 'barney', age: 34 },
  { user: 'arney', age: 36 },
  { user: 'ared' },
];

const cmp = (x, y) => {
  if (x.age === y.age) {
    return x.user.localeCompare(y.user);
  }
  if (!x.age) {
    return 1;
  }
  if (!y.age) {
    return -1;
  }
  return x.age > y.age ? 1 : -1;
};
const ret = users.sort(cmp);
console.log(ret);

【讨论】:

    【解决方案2】:

    您可以采用默认值Number.MAX_VALUE 来计算age 的增量。

    const users = [{ user: 'fred' }, { user: 'barney', age: 36 }, { user: 'fred', age: 40 }, { user: 'barney', age: 34 }, { user: 'arney', age: 36 }, { user: 'ared' }];
    
    users.sort((a, b) =>
        (a.age ?? Number.MAX_VALUE) - (b.age ?? Number.MAX_VALUE) ||
        a.user.localeCompare(b.user)
    );
    
    console.log(users);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

    猜你喜欢
    • 2017-04-12
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    相关资源
    最近更新 更多