JS Find indices of duplicate values in array if there are more than two duplicates

末鹿安然 提交于 2020-07-10 16:02:09

问题


I'm creating coordinate plane Three in a row game so I have to find out if there are three numbers of the same value in the array BUT WITHOUT sorting array because the array represents the x-coordinates of the points added to the coordinate plane during the game... For example, let's say that I've added 6 points to the coordinate plane with x-coordinates stored in next array:

var arr = [2,2,3,2,7,3];

I need the loop that will count only the occurrences of the value 2 because the number 2 occurs 3 times in array, so the output should be a new array (for example array named indices) with the exact indices of nmb 2 occurrences in arr...

indices = [0,1,3]

The loop should therefor "reset" when comes to the end of the arr if the number of occurrences of some value is less than 3...

I've tried the next code, but it doesn't work like I've described above because it counts the number of occurrences of the number 3 as well... so, it won't "reset" if value count is less than 2...

var arr = [2,2,3,2,7,3];
var index = [];
var count = 0;
var current;
for(var i = 0;i<arr.length;i++){
    current = arr[i];
    //-------------------------------
    for(var j=i+1;j<arr.length;j++){
        if(arr[j]===current){
            count++;
            index.push(j);
            //+++++++++++
            if(j===arr.length-1){
                if(count<2){
                    count = 0;
                    index = [];
                    i++;
                }
                else{
                    index.unshift(i);
                    break;
                }
            }
            //+++++++++++
        }
    }
    //-------------------------------
}
alert(index);

Thanks for any help or advice...

Aleksandra


回答1:


Yes, using some logic...

var arr = [2, 2, 3, 2, 7, 3];

function showDupPos(arr, mindups) {
  mindups = mindups || 2;
  var result = [];
  var positions = {};
  // collect all positions
  arr.forEach(function(value, pos) {
    positions[value] = positions[value] || [];
    positions[value].push(pos);
  });
  //check how much of same value in string
  Object.keys(positions).forEach(function(value) {
    var posArray = positions[value];
    if (posArray.length > mindups) {
      result = result.concat(posArray);
    }
  });
  return result.sort();
}
console.log(showDupPos(arr));



回答2:


I would do like this way

  
var arr = [2,2,3,2,7,3];

var indices = [];

arr.filter(function(yourArray, index) {
 if(yourArray == 2){
   indices.push(index)
 }
});
console.log(indices)
if you print the indices it will contain this output [0,1,3]

if you want to check that there are more then two duplicates you you can do this way

  

var arr = [2,2,3,2,7,3];
var counts = arr.filter(function(yourArr,index, self){
  return !self.indexOf(yourArr) 
});

var indices = [];

arr.filter(function(yourArr, index, self){
  if(yourArr == 2 && counts.length > 2){
   indices.push(index)
 }
})
console.log(indices)



回答3:


this is my solution.

var arr = [2,2,3,2,7,3];

var dictionary = {};
for(var i=0;i<arr.length;i++){
  if(dictionary[arr[i]]){
    dictionary[arr[i]]++;
  }else{
    dictionary[arr[i]] = 1;
  }
}

for(var num in dictionary){
  if(dictionary[num] == 3){
    alert(num);
  }
}


来源:https://stackoverflow.com/questions/38533160/js-find-indices-of-duplicate-values-in-array-if-there-are-more-than-two-duplicat

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!