【问题标题】:How would I write the Lodash function orderBy in VanillaJS?我将如何在 VanillaJS 中编写 Lodash 函数 orderBy?
【发布时间】:2021-01-12 17:45:00
【问题描述】:

我看到很多关于 lodash 函数 sortBy() 从 LoDash 到 Vanilla JS 的翻译。但是,我没有看到任何 orderBy。该函数如何用标准的 Javascript 编写?

【问题讨论】:

  • 排序与顺序有何不同??
  • 第三个参数类似于 _.orderBy(activity, 'count', 'desc') vs 'asc'
  • 我知道这不是真正的答案,但您可以调整 sortBy 中的排序功能以适应各种 'asc' 和 'desc' 参数

标签: javascript sorting lodash


【解决方案1】:

此解决方案似乎具有相同的功能:

function sortBy (key, cb) {
  if (!cb) cb = () => 0
  return (a, b) => (a[key] > b[key]) ? 1
    : ((b[key] > a[key]) ? -1 : cb(a, b))
}

function sortByDesc (key, cb) {
  if (!cb) cb = () => 0
  return (b, a) => (a[key] > b[key]) ? 1
    : ((b[key] > a[key]) ? -1 : cb(b, a))
}

function orderBy (keys, orders) {
  let cb = () => 0
  keys.reverse()
  orders.reverse()
  for (const [i, key] of keys.entries()) {
    const order = orders[i]
    if (order == 'asc') {
      cb = sortBy(key, cb)
    } else if (order == 'desc') {
      cb = sortByDesc(key, cb)
    } else {
      throw new Error(`Unsupported order "${order}"`)
    }
  }
  return cb
}

// usage:
users.sort( orderBy( ['user', 'age'], ['asc', 'desc'] ) );

来源:https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore/issues/280#issuecomment-690604745

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 2022-12-08
    • 1970-01-01
    相关资源
    最近更新 更多