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.
34 lines
831 B
34 lines
831 B
4 years ago
|
'use strict';
|
||
|
|
||
|
var _require = require('../helpers/is'),
|
||
|
isFunction = _require.isFunction;
|
||
|
|
||
|
module.exports = function unique(key) {
|
||
|
var collection = void 0;
|
||
|
|
||
|
if (key === undefined) {
|
||
|
collection = this.items.filter(function (element, index, self) {
|
||
|
return self.indexOf(element) === index;
|
||
|
});
|
||
|
} else {
|
||
|
collection = [];
|
||
|
|
||
|
var usedKeys = [];
|
||
|
|
||
|
for (var iterator = 0, length = this.items.length; iterator < length; iterator += 1) {
|
||
|
var uniqueKey = void 0;
|
||
|
if (isFunction(key)) {
|
||
|
uniqueKey = key(this.items[iterator]);
|
||
|
} else {
|
||
|
uniqueKey = this.items[iterator][key];
|
||
|
}
|
||
|
|
||
|
if (usedKeys.indexOf(uniqueKey) === -1) {
|
||
|
collection.push(this.items[iterator]);
|
||
|
usedKeys.push(uniqueKey);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return new this.constructor(collection);
|
||
|
};
|