cb9580b9d01ab11ff6ab49bc28dc56bc4dc73e8585426faf48be25596ce8ba79d284eab65f999cb31bff0ad810ffc47d5d20fbd65497a991867214c7ae2a29 1.6 KB

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