我必须得到一个在数组中存在多次的值列表。 这是当前的代码,但你可以看到它太复杂了。
.parentNode
有没有其他方法(使用javascript内置函数的简单代码)来实现这一目标?任何形式的帮助表示赞赏。
答案 0 :(得分:3)
var arr = [1, 2, 3, 4, 2, 3];
var o = arr.reduce((o, n) => {
n in o ? o[n] += 1 : o[n] = 1;
return o;
}, {});
var res = Object.keys(o).filter(k => o[k] > 1);
console.log(res);

答案 1 :(得分:2)
您可以根据第一个和当前索引不相等的值过滤数组,然后通过Set
const arr = [1, 2, 3, 4, 2, 3, 2, 3, 2, 3, 2, 3]; // added in some extras
const filtered = arr.filter((v, i) => arr.indexOf(v) !== i)
const unique = new Set(filtered)
console.info(Array.from(unique)) // using Array.from so it can be logged
答案 2 :(得分:1)
有点hacky,但是短而且O(n):
var arr = [1, 2, 3, 4, 2, 3, 2, 2]
var a = arr.reduce((r, v) => ((r[v + .1] = r[v + .1] + 1 || 1) - 2 || r.push(v), r), [])
console.log( a ) // [2,3]
console.log({ ...a }) // to show the "hidden" items
console.log({ ...a.slice() }) // .slice() can be used to remove the extra items
答案 3 :(得分:0)
可以这样做:
function timesInArray(v, a){
var n = 0;
for(var i=0,l=a.length; i<l; i++){
if(a[i] === v){
n++;
}
}
return n;
}
function dups(dupArray, num){
var n = num === undefined ? 2 : num;
var r = [];
for(var i=0,d,l=dupArray.length; i<l; i++){
d = dupArray[i];
if(!timesInArray(d, r) && timesInArray(d, dupArray) >= n){
r.push(d);
}
}
return r;
}
var testArray = [4, 5, 2, 5, 7, 7, 2, 1, 3, 7, 7, 7, 25, 77, 4, 2];
console.log(dups(testArray)); console.log(dups(testArray, 3));