获取值列表在数组中存在多次

时间:2017-11-15 02:37:53

标签: javascript arrays loops

我必须得到一个在数组中存在多次的值列表。 这是当前的代码,但你可以看到它太复杂了。

.parentNode

有没有其他方法(使用javascript内置函数的简单代码)来实现这一目标?任何形式的帮助表示赞赏。

4 个答案:

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