1'use strict'; 2 3Object.defineProperty(exports, "__esModule", { 4 value: true 5}); 6exports.default = _filter; 7 8var _isArrayLike = require('./isArrayLike.js'); 9 10var _isArrayLike2 = _interopRequireDefault(_isArrayLike); 11 12var _wrapAsync = require('./wrapAsync.js'); 13 14var _wrapAsync2 = _interopRequireDefault(_wrapAsync); 15 16function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 17 18function filterArray(eachfn, arr, iteratee, callback) { 19 var truthValues = new Array(arr.length); 20 eachfn(arr, (x, index, iterCb) => { 21 iteratee(x, (err, v) => { 22 truthValues[index] = !!v; 23 iterCb(err); 24 }); 25 }, err => { 26 if (err) return callback(err); 27 var results = []; 28 for (var i = 0; i < arr.length; i++) { 29 if (truthValues[i]) results.push(arr[i]); 30 } 31 callback(null, results); 32 }); 33} 34 35function filterGeneric(eachfn, coll, iteratee, callback) { 36 var results = []; 37 eachfn(coll, (x, index, iterCb) => { 38 iteratee(x, (err, v) => { 39 if (err) return iterCb(err); 40 if (v) { 41 results.push({ index, value: x }); 42 } 43 iterCb(err); 44 }); 45 }, err => { 46 if (err) return callback(err); 47 callback(null, results.sort((a, b) => a.index - b.index).map(v => v.value)); 48 }); 49} 50 51function _filter(eachfn, coll, iteratee, callback) { 52 var filter = (0, _isArrayLike2.default)(coll) ? filterArray : filterGeneric; 53 return filter(eachfn, coll, (0, _wrapAsync2.default)(iteratee), callback); 54} 55module.exports = exports['default'];