JS如果有两个以上的重复项,则在数组中查找重复值的索引

时间:2016-07-22 18:30:03

标签: javascript arrays for-loop duplicates

我正在创建坐标平面三连续游戏所以我必须找出数组中是否有三个相同值的数字BUT WITHOUT排序数组因为数组表示添加到数组中的点的x坐标在比赛期间协调飞机...... 例如,假设我已经在坐标平面上添加了6个点,其中x坐标存储在下一个数组中:

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

我需要一个只计算值2出现次数的循环,因为数字2在数组中出现3次,所以输出应该是一个新数组(例如名为indices的数组),其精确索引为nmb 2次出现在... ...

indices = [0,1,3]

如果某个值的出现次数小于3,那么当arr结束时,循环应该“重置”...

我已经尝试了下一个代码,但它不像我上面描述的那样工作,因为它计算了数字3的出现次数......所以,如果值不会“重置”数小于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);

感谢您提供任何帮助或建议......

亚历山德拉

3 个答案:

答案 0 :(得分:5)

我会这样做

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

var indices = [];

arr.filter(function(yourArray, index) {
 if(yourArray == 2){
   indices.push(index)
 }
});
console.log(indices)
如果您打印索引,它将包含此输出 [0,1,3]

如果你想检查是否有两个以上的重复,你就可以这样做   

  

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)

答案 1 :(得分:0)

是的,使用一些逻辑...

&#13;
&#13;
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));
&#13;
&#13;
&#13;

答案 2 :(得分:0)

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);
  }
}