UNPKG

foop

Version:

interfaces that describe their intentions.

68 lines (58 loc) 7.46 kB
// https://github.com/jashkenas/underscore/blob/master/underscore.js#L410 // https://github.com/lodash/lodash/blob/4.7.0-npm-packages/lodash.sortby/index.js#L2079 var isArrayLike = require('../../is/array') var isUndefined = require('../../is/undefined') var ObjectKeys = require('../../util/keys') // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only argCount argument. // var builtinIteratee = function(value, context) { // return cb(value, context, Infinity) // } // var iteratee = builtinIteratee // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `identity`, // an arbitrary callback, a property matcher, or a property accessor. // var cb = function(value, context, argCount) { // if (iteratee !== builtinIteratee) return iteratee(value, context) // // if (value == null) return _.identity // // if (_.isFunction(value)) return optimizeCb(value, context, argCount) // // if (_.isObject(value) && !_.isArray(value)) return _.matcher(value) // // return _.property(value) // } // _.map = _.collect // Return the results of applying the iteratee to each element. var map = function(obj, iteratee, context) { // iteratee = cb(iteratee, context) var keys = !isArrayLike(obj) && ObjectKeys(obj) var length = (keys || obj).length var results = Array(length) for (var index = 0; index < length; index++) { var currentKey = keys ? keys[index] : index results[index] = iteratee(obj[currentKey], currentKey, obj) } return results } var sortBy = function(obj, iteratee, context) { var index = 0 var mapper = function(value, key, list) { return { value: value, index: index++, criteria: iteratee(value, key, list), } } var sorter = function(left, right) { var a = left.criteria var b = right.criteria if (a !== b) { if (a > b || isUndefined(a)) { return 1 } if (a < b || isUndefined(b)) { return -1 } } return left.index - right.index } // iteratee = cb(iteratee, context) // _.pluck(returned, 'value') return map(obj, mapper).sort(sorter) } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydEJ5LmpzIiwic291cmNlcyI6WyJzb3J0QnkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL2Jsb2IvbWFzdGVyL3VuZGVyc2NvcmUuanMjTDQxMFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvYmxvYi80LjcuMC1ucG0tcGFja2FnZXMvbG9kYXNoLnNvcnRieS9pbmRleC5qcyNMMjA3OVxuY29uc3QgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuLi8uLi9pcy9hcnJheScpXG5jb25zdCBpc1VuZGVmaW5lZCA9IHJlcXVpcmUoJy4uLy4uL2lzL3VuZGVmaW5lZCcpXG5jb25zdCBPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vLi4vdXRpbC9rZXlzJylcblxuLy8gRXh0ZXJuYWwgd3JhcHBlciBmb3Igb3VyIGNhbGxiYWNrIGdlbmVyYXRvci4gVXNlcnMgbWF5IGN1c3RvbWl6ZVxuLy8gYF8uaXRlcmF0ZWVgIGlmIHRoZXkgd2FudCBhZGRpdGlvbmFsIHByZWRpY2F0ZS9pdGVyYXRlZSBzaG9ydGhhbmQgc3R5bGVzLlxuLy8gVGhpcyBhYnN0cmFjdGlvbiBoaWRlcyB0aGUgaW50ZXJuYWwtb25seSBhcmdDb3VudCBhcmd1bWVudC5cblxuLy8gdmFyIGJ1aWx0aW5JdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0KSB7XG4vLyAgIHJldHVybiBjYih2YWx1ZSwgY29udGV4dCwgSW5maW5pdHkpXG4vLyB9XG4vLyB2YXIgaXRlcmF0ZWUgPSBidWlsdGluSXRlcmF0ZWVcblxuLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgY2FsbGJhY2tzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gZWFjaFxuLy8gZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24sIHJldHVybmluZyB0aGUgZGVzaXJlZCByZXN1bHQg4oCUIGVpdGhlciBgaWRlbnRpdHlgLFxuLy8gYW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5IG1hdGNoZXIsIG9yIGEgcHJvcGVydHkgYWNjZXNzb3IuXG4vLyB2YXIgY2IgPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpIHtcbi8vICAgaWYgKGl0ZXJhdGVlICE9PSBidWlsdGluSXRlcmF0ZWUpIHJldHVybiBpdGVyYXRlZSh2YWx1ZSwgY29udGV4dClcbi8vICAgLy8gaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBfLmlkZW50aXR5XG4vLyAgIC8vIGlmIChfLmlzRnVuY3Rpb24odmFsdWUpKSByZXR1cm4gb3B0aW1pemVDYih2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpXG4vLyAgIC8vIGlmIChfLmlzT2JqZWN0KHZhbHVlKSAmJiAhXy5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIF8ubWF0Y2hlcih2YWx1ZSlcbi8vICAgLy8gcmV0dXJuIF8ucHJvcGVydHkodmFsdWUpXG4vLyB9XG5cbi8vIF8ubWFwID0gXy5jb2xsZWN0XG4vLyBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudC5cbmNvbnN0IG1hcCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgLy8gaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dClcblxuICBjb25zdCBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgT2JqZWN0S2V5cyhvYmopXG4gIGNvbnN0IGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoXG4gIGNvbnN0IHJlc3VsdHMgPSBBcnJheShsZW5ndGgpXG5cbiAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXhcbiAgICByZXN1bHRzW2luZGV4XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKVxuICB9XG4gIHJldHVybiByZXN1bHRzXG59XG5cbmNvbnN0IHNvcnRCeSA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgdmFyIGluZGV4ID0gMFxuXG4gIGNvbnN0IG1hcHBlciA9IGZ1bmN0aW9uKHZhbHVlLCBrZXksIGxpc3QpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWUsXG4gICAgICBpbmRleDogaW5kZXgrKyxcbiAgICAgIGNyaXRlcmlhOiBpdGVyYXRlZSh2YWx1ZSwga2V5LCBsaXN0KSxcbiAgICB9XG4gIH1cbiAgY29uc3Qgc29ydGVyID0gZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWFcbiAgICB2YXIgYiA9IHJpZ2h0LmNyaXRlcmlhXG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgIGlmIChhID4gYiB8fCBpc1VuZGVmaW5lZChhKSkgcmV0dXJuIDFcbiAgICAgIGlmIChhIDwgYiB8fCBpc1VuZGVmaW5lZChiKSkgcmV0dXJuIC0xXG4gICAgfVxuICAgIHJldHVybiBsZWZ0LmluZGV4IC0gcmlnaHQuaW5kZXhcbiAgfVxuXG4gIC8vIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpXG4gIC8vIF8ucGx1Y2socmV0dXJuZWQsICd2YWx1ZScpXG4gIHJldHVybiBtYXAob2JqLCBtYXBwZXIpLnNvcnQoc29ydGVyKVxufVxuIl0sIm5hbWVzIjpbImNvbnN0Il0sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQUEsR0FBSyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7QUFDN0NBLEdBQUssQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUFDO0FBQ2pEQSxHQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0I3Q0EsR0FBSyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFOzs7RUFHM0NBLEdBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQztFQUNqREEsR0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNO0VBQ25DQSxHQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7O0VBRTdCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7SUFDM0MsSUFBSSxVQUFVLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLO0lBQzNDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUM7R0FDNUQ7RUFDRCxPQUFPLE9BQU87Q0FDZjs7QUFFREEsR0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO0VBQzlDLElBQUksS0FBSyxHQUFHLENBQUM7O0VBRWJBLEdBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtJQUN4QyxPQUFPO01BQ0wsT0FBQSxLQUFLO01BQ0wsS0FBSyxFQUFFLEtBQUssRUFBRTtNQUNkLFFBQVEsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUM7S0FDckM7R0FDRjtFQUNEQSxHQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsSUFBSSxFQUFFLEtBQUssRUFBRTtJQUNuQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUTtJQUNyQixJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUTtJQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7TUFDWCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUEsT0FBTyxDQUFDLEVBQUE7TUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFBLE9BQU8sQ0FBQyxDQUFDLEVBQUE7S0FDdkM7SUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUs7R0FDaEM7Ozs7RUFJRCxPQUFPLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztDQUNyQzsifQ==