🎶 Sym - 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台

📕 思源笔记 - 一款桌面端笔记应用,支持 Windows、Mac 和 Linux

🎸 Solo - B3log 分布式社区的博客端节点,欢迎加入下一代社区网络

♏ Vditor - 一款浏览器端的 Markdown 编辑器

根据指定属性和排序规则为数组进行排序

2020-08-17

描述

将数组对象根据指定的属性和排序方式进行排序。

提示

  • 使用 Array.prototype.sort()
  • 在给定的 props 数组上使用默认值为 0 的 Array.prototype.reduce() 方法
  • 根据传如的排序规则使用数组解构来交换其属性位置
  • orders 数组的默认值为 'asc'

代码

const orderBy = (arr, props, orders) =>
  [...arr].sort((a, b) =>
    props.reduce((acc, prop, i) => {
      if (acc === 0) {
        const [p1, p2] = orders && orders[i] === 'desc' ? [b[prop], a[prop]] : [a[prop], b[prop]];
        acc = p1 > p2 ? 1 : p1 < p2 ? -1 : 0;
      }
      return acc;
    }, 0)
  );

示例

按照 nameage 属性进行排序:

const users = [{ name: 'fred', age: 48 }, { name: 'barney', age: 36 }, { name: 'fred', age: 40 }];
orderBy(users, ['name', 'age'], ['asc', 'desc']);  // [{name: "barney", age: 36}, {name: "fred", age: 48}, {name: "fred", age: 40}]
orderBy(users, ['name', 'age']);  // [{name: "barney", age: 36}, {name: "fred", age: 40}, {name: "fred", age: 48}]

返回总目录

每天 30 秒系列之 JavaScript 代码


欢迎注册黑客派社区,开启你的博客之旅。让学习和分享成为一种习惯!

留下你的脚步