Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
4.0k views
in Technique[技术] by (71.8m points)

javascript - How would I write the Lodash function orderBy in VanillaJS?

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?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...