foop
Version:
interfaces that describe their intentions.
65 lines (59 loc) • 5.72 kB
JavaScript
var isArray = require('../../is/array')
var objOrArrayKeys = require('../../util/keysObjOrArray')
var curry = require('../../fp/curry')
var emptyTarget = require('../../dopemerge/emptyTarget')
var defaultTo = require('../../cast/defaultTo')
/**
* filters an object or array
* `iteratee`. The iteratee is invoked with three arguments: (value, key, object).
* @memberOf loop
*
* @param {Object} obj The object to iterate over.
* @param {Function} predicate The function invoked per iteration.
* @param {Object} [init={}] output result object initial value
* @return {Array} Returns the new mapped array.
*
* @name filterWhere
* @alias pluckWhere
* @alias filter
*
* @since 5.0.0
* @category Object
*
* {@link https://github.com/ramda/ramda/tree/v0.24.1/src/filter.js ramda-filter}
* {@link https://github.com/lodash/lodash/blob/master/mapObject.js lodash-map-obj}
* {@link https://github.com/jashkenas/underscore/blob/master/underscore.js#L1021 underscore-map-obj}
* {@link https://github.com/lodash/lodash/blob/master/map.js lodash-map}
* @see {@link lodash-map}
* @see {@link underscore-map}
* @see {@link ramda-filter}
*
* @TODO add `key first` sig option
*
* @example
*
* map([1, 2, 3, 'nope'], isNumber)
* //=> [1, 2, 3]
*
* @example
*
* /// because `value` is first
* map({'1': 1, 'nope': 'nope'}, isNumber)
* //=> [1, 2, 3]
*
*/
function filterMap(obj, predicate, init) {
var result = defaultTo(emptyTarget(obj), init)
var isArrayObj = isArray(obj)
var keys = objOrArrayKeys(obj)
for (var index = 0; index < keys.length; index++) {
var key = isArrayObj ? index : keys[index]
var value = obj[key]
if (predicate(value, key, obj)) {
result[key] = value
}
}
return result
}
module.exports = curry(2, filterMap)
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyV2hlcmUuanMiLCJzb3VyY2VzIjpbImZpbHRlcldoZXJlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGlzQXJyYXkgPSByZXF1aXJlKCcuLi8uLi9pcy9hcnJheScpXG5jb25zdCBvYmpPckFycmF5S2V5cyA9IHJlcXVpcmUoJy4uLy4uL3V0aWwva2V5c09iak9yQXJyYXknKVxuY29uc3QgY3VycnkgPSByZXF1aXJlKCcuLi8uLi9mcC9jdXJyeScpXG5jb25zdCBlbXB0eVRhcmdldCA9IHJlcXVpcmUoJy4uLy4uL2RvcGVtZXJnZS9lbXB0eVRhcmdldCcpXG5jb25zdCBkZWZhdWx0VG8gPSByZXF1aXJlKCcuLi8uLi9jYXN0L2RlZmF1bHRUbycpXG5cbi8qKlxuICogZmlsdGVycyBhbiBvYmplY3Qgb3IgYXJyYXlcbiAqIGBpdGVyYXRlZWAuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGtleSwgb2JqZWN0KS5cbiAqIEBtZW1iZXJPZiBsb29wXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtPYmplY3R9IFtpbml0PXt9XSBvdXRwdXQgcmVzdWx0IG9iamVjdCBpbml0aWFsIHZhbHVlXG4gKiBAcmV0dXJuIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqXG4gKiBAbmFtZSBmaWx0ZXJXaGVyZVxuICogQGFsaWFzIHBsdWNrV2hlcmVcbiAqIEBhbGlhcyBmaWx0ZXJcbiAqXG4gKiBAc2luY2UgNS4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3JhbWRhL3JhbWRhL3RyZWUvdjAuMjQuMS9zcmMvZmlsdGVyLmpzIHJhbWRhLWZpbHRlcn1cbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iL21hc3Rlci9tYXBPYmplY3QuanMgbG9kYXNoLW1hcC1vYmp9XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL2Jsb2IvbWFzdGVyL3VuZGVyc2NvcmUuanMjTDEwMjEgdW5kZXJzY29yZS1tYXAtb2JqfVxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvbWFzdGVyL21hcC5qcyBsb2Rhc2gtbWFwfVxuICogQHNlZSB7QGxpbmsgbG9kYXNoLW1hcH1cbiAqIEBzZWUge0BsaW5rIHVuZGVyc2NvcmUtbWFwfVxuICogQHNlZSB7QGxpbmsgcmFtZGEtZmlsdGVyfVxuICpcbiAqIEBUT0RPIGFkZCBga2V5IGZpcnN0YCBzaWcgb3B0aW9uXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgIG1hcChbMSwgMiwgMywgJ25vcGUnXSwgaXNOdW1iZXIpXG4gKiAgIC8vPT4gWzEsIDIsIDNdXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgIC8vLyBiZWNhdXNlIGB2YWx1ZWAgaXMgZmlyc3RcbiAqICAgbWFwKHsnMSc6IDEsICdub3BlJzogJ25vcGUnfSwgaXNOdW1iZXIpXG4gKiAgIC8vPT4gWzEsIDIsIDNdXG4gKlxuICovXG5mdW5jdGlvbiBmaWx0ZXJNYXAob2JqLCBwcmVkaWNhdGUsIGluaXQpIHtcbiAgY29uc3QgcmVzdWx0ID0gZGVmYXVsdFRvKGVtcHR5VGFyZ2V0KG9iaiksIGluaXQpXG4gIGNvbnN0IGlzQXJyYXlPYmogPSBpc0FycmF5KG9iailcbiAgY29uc3Qga2V5cyA9IG9iak9yQXJyYXlLZXlzKG9iailcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwga2V5cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBrZXkgPSBpc0FycmF5T2JqID8gaW5kZXggOiBrZXlzW2luZGV4XVxuICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV1cblxuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGtleSwgb2JqKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjdXJyeSgyLCBmaWx0ZXJNYXApXG4iXSwibmFtZXMiOlsiY29uc3QiLCJsZXQiXSwibWFwcGluZ3MiOiJBQUFBQSxHQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUN6Q0EsR0FBSyxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsMkJBQTJCLENBQUM7QUFDM0RBLEdBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDO0FBQ3ZDQSxHQUFLLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQztBQUMxREEsR0FBSyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUNqRCxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRTtFQUN2Q0EsR0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQztFQUNoREEsR0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0VBQy9CQSxHQUFLLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUM7O0VBRWhDLEtBQUtDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQ2hERCxHQUFLLENBQUMsR0FBRyxHQUFHLFVBQVUsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUM1Q0EsR0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDOztJQUV0QixJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO01BQzlCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLO0tBQ3BCO0dBQ0Y7O0VBRUQsT0FBTyxNQUFNO0NBQ2Q7O0FBRUQsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQzsifQ==