uniq.js 802 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. var each = require('./each')
  2. var includes = require('./includes')
  3. var isFunction = require('./isFunction')
  4. var property = require('./property')
  5. /**
  6. * 数组去重
  7. *
  8. * @param {*} array 数组
  9. * @param {*} iterate 字段或回调
  10. * @param {*} context
  11. * @returns
  12. */
  13. function uniq (array, iterate, context) {
  14. var result = []
  15. if (iterate) {
  16. if (!isFunction(iterate)) {
  17. iterate = property(iterate)
  18. }
  19. var val, valMap = {}
  20. each(array, function (item, key) {
  21. val = iterate.call(context, item, key, array)
  22. if (!valMap[val]) {
  23. valMap[val] = 1
  24. result.push(item)
  25. }
  26. })
  27. } else {
  28. each(array, function (value) {
  29. if (!includes(result, value)) {
  30. result.push(value)
  31. }
  32. })
  33. }
  34. return result
  35. }
  36. module.exports = uniq