2016-07-22 9 views
-1

座標プレーンを3つ作成しているので、配列内に同じ値の3つの数字があるかどうかを調べる必要があります。配列がゲーム中に座標面に追加された点のx座標を表すためです。 たとえば、次の配列に格納されたx座標を持つ座標面に6点を追加したとしましょう:JS重複値が3つ以上ある場合、配列内に重複値のインデックスを見つける

I番号2は、配列中に3回発生するので、出力は正確な指標と(インデックス命名例えばアレイの)新しい配列でなければならないので、値2のみ発生をカウントするループを必要
var arr = [2,2,3,2,7,3]; 

NMB ARRで2つの出現...の

indices = [0,1,3] 
ループはそのためのARRの終わりに来るとき、いくつかの値の出現数が3未満の場合、「リセット」する必要があり

...

私は次のコードを試しましたが、数字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); 

おかげで...

より

アレクサンドラ

答えて

0

はい、いくつかのロジックを使用して...

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

+0

zb 'コードスニペットを実行しただけで、完全に機能します。残念ながら私はここに投稿したことはありませんので、私はあなたの答えやそのようなものを好きにする方法がわからない... – Alex

+0

ちょうど親指をアップし、カウンターの近くにマーク –

+0

私は本当に愚かで、私は誤ってあなたの答えのほかに、今私の投稿の上に-1があります。私が以前に言いましたように、私はここに投稿したことはありません。今、このアクションを元に戻す方法はわかりません。その後、私は矢印を数回クリックしたが、何も起こらなかった...申し訳ありません申し訳ありません... – Alex

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

あなたの提案をありがとう!私はkey => value配列で自分自身を試しましたが、出力は出現回数ですが、元の配列の出現のインデックスが必要です... – Alex

4

私はこの方法のように行うだろう


 
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]

が含まれています2つ以上の複製があることを確認してください。


 

 
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)

+0

私はOPがちょうど2のためにチェックする必要があるとは思わない、私は 'var arr = [2,2,3,2,7,3,3];だと思う '' [0,1,2,3 、5,6] ' –

+0

あなたの努力と提案に感謝しますが、前のコメントと同じように、ある特定の値/数値だけループする必要はありませんが、配列をループする必要があります。または3回以上、出力配列は、元の配列のその値の出現のインデックスを含む必要があります... – Alex

+0

それはちょうどそれがどのように動作するか考えです。コードを関数にラップし、必要な値を提供することができます。 –

関連する問題