You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
802 B
38 lines
802 B
var each = require('./each')
|
|
var includes = require('./includes')
|
|
var isFunction = require('./isFunction')
|
|
var property = require('./property')
|
|
|
|
/**
|
|
* 数组去重
|
|
*
|
|
* @param {*} array 数组
|
|
* @param {*} iterate 字段或回调
|
|
* @param {*} context
|
|
* @returns
|
|
*/
|
|
function uniq (array, iterate, context) {
|
|
var result = []
|
|
if (iterate) {
|
|
if (!isFunction(iterate)) {
|
|
iterate = property(iterate)
|
|
}
|
|
var val, valMap = {}
|
|
each(array, function (item, key) {
|
|
val = iterate.call(context, item, key, array)
|
|
if (!valMap[val]) {
|
|
valMap[val] = 1
|
|
result.push(item)
|
|
}
|
|
})
|
|
} else {
|
|
each(array, function (value) {
|
|
if (!includes(result, value)) {
|
|
result.push(value)
|
|
}
|
|
})
|
|
}
|
|
return result
|
|
}
|
|
|
|
module.exports = uniq
|
|
|