我使用lodash并且我有一个数组:
const arr = ['firstname', 'lastname', 'initials', 'initials'];
我想要一个新数组,其中只包含多次出现的值(重复值)。
这似乎是lodash可能有一个特定的方法,但我看不到一个。像const dups = _.duplicates(arr);
这样的东西会很好。
我有:
// object with array values and number of occurrences
const counts = _.countBy(arr, value => value);
// reduce object to only those with more than 1 occurrence
const dups = _.pickBy(counts, value => (value > 1));
// just the keys
const keys = _.keys(dups);
console.log(keys); // ['initials']
有没有比这更好的方法..?
答案 0 :(得分:3)
没有必要使用lodash执行此任务,您可以使用Array.prototype.reduce()
和Array.prototype.indexOf()
的纯JavaScript来轻松实现它:
var arr = ['firstname', 'lastname', 'initials', 'initials', 'a', 'c', 'a', 'a', 'c'];
var dupl = arr.reduce(function(list, item, index, array) {
if (array.indexOf(item, index + 1) !== -1 && list.indexOf(item) === -1) {
list.push(item);
}
return list;
}, []);
console.log(dupl); // prints ["initials", "a", "c"]
检查工作demo。
或者用lodash简单一点:
var arr = ['firstname', 'lastname', 'initials', 'initials', 'a', 'c', 'a', 'a', 'c'];
var dupl = _.uniq(_.reject(arr, function(item, index, array) {
return _.indexOf(array, item, index + 1) === -1;
}));
console.log(dupl); // prints ["initials", "a", "c"]
答案 1 :(得分:2)
您可以使用此
let dups = _.filter(array, (val, i, it) => _.includes(it, val, i + 1));
如果您只想在dups
数组中使用唯一重复项,则可以在其上使用_.uniq()
。