Welcome to 16892 Developer Community-Open, Learning,Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I see a lot of translations from LoDash to Vanilla JS for the lodash function sortBy(). However, I don't see any for orderBy. How can that function be written in standard Javascript?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
3.6k views
Welcome To Ask or Share your Answers For Others

1 Answer

This solution seems to approximate the same functionality:

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'] ) );

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to 16892 Developer Community-Open, Learning and Share
...