出现多次的数组值

时间:2016-04-28 10:19:17

标签: javascript arrays lodash

我使用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']

有没有比这更好的方法..?

2 个答案:

答案 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()