0

配列をチェックして、配列内に連続した重複番号があるかどうかを確認し、それらの位置を見つける必要があります。

例正確に必要なものはあなたのアイデアを明確にします

var myCars=[1 ,1 , 2, 3, 5];   O/P:- 1 is repeated at position 0 & 1.

var myCars=[1 ,1 , 2, 5, 5];   O/P:- 5 is repeated at position 3 & 4. Since 5 is maximum number.

var myCars=[5 ,4 , 1, 1, 1];   O/P:- 1 is repeated at position 2 ,3 & 4.

var myCars=[5 ,5 , 1, 1, 1];   O/P:- 1 is repeated at position 2 ,3 & 4. Since 1 is repeated more number of times.

私はこれをいくつかの方法で試しましたが、最良の方法を見つけることができませんでした。これを行う最も簡単な方法は何ですか?

私が試した次のコードは、正確に望ましい出力を提供していません。

var myarray = ["John", "Doe", "Smith", "Doe", "Joe"];

var map = {};
var count = myarray.map(function(val) {
    return map[val] = (typeof map[val] === "undefined") ? 1 : map[val] + 1;
});

var newArray = myarray.map(function(val, index) {
    return val + (map[val] != 1 ? ' - ' + count[index] : '');
});

alert(newArray);

要素のみが配列にあると仮定します

http://jsfiddle.net/alnitak/Z4dgr/

4

4 に答える 4

1

これは機能します。繰り返し処理し、次の項目と前の項目に対して現在の項目を確認します。各アイテムの一致数と一致のインデックスを個別のオブジェクトに追加します。

var results = {};
var positions = {};

myarray.forEach(function(item, index) { 

    if ((index > 0 && myarray[index-1] == item) || (index < myarray.length+1 && myarray[index+1] == item)) {
        results[item] = (results[item] || 0) + 1;
        (positions[item] || (positions[item] = [])).push(index);
    }
});

alert(JSON.stringify(results));
alert(JSON.stringify(positions));​

JSFiddle

于 2012-12-03T05:01:03.847 に答える
0

私がすることは、数えるための2次元配列を作成することです。最初のシミュレーションはカウントされるアイテムになり、2番目のシミュレーションはそのアイテムのカウントになります。そして、あなたの比較を行います。配列を埋めた後。

このソリューションを選択したのは、プログラミングに対するシンプルでわかりやすいアプローチが好きだからです。生活を楽にします。

于 2012-12-03T05:07:23.977 に答える
0

これには関数を使用できますjquery inArray:コードは

var myarray = ["John", "John", "John", "Doe", "Doe", "Smith",
               "John", "Doe", "Joe"];


var str='';var i=0;
$.each(myarray,function()
       {
           str+=myarray[i]+'='+$.inArray(myarray[i],myarray,i)+', ';
           i++;
       })

alert(str);

または、ここでフィドルをテストしますhttp://jsfiddle.net/Z4dgr/2/

于 2012-12-03T05:09:40.723 に答える
0

このコードは、希望どおりに機能します

http://jsfiddle.net/9mQ2b/11/

<!DOCTYPE html> 
<html> 
<script>
var myarray = ["1", "1", "4", "4", "3"];
var results = {};
var positions = {};
var j = count = -1;
for(i=0; i<=3; i++)
{ 
if (myarray[i] == myarray[i+1])  // check if num are equal
{
if (count != myarray[i])   //check if continuous num are not equal & set starting position..
{ j++; results[j] = myarray[i]; positions[j] = i; count = myarray[i];
}
if (i == 3) //  set last position of last number if last digit 
positions[j+1] = i+1;
}
else
{
if (count == myarray[i])  // set last position of digit
positions[++j] = i;
count = -1;
}
}
alert(JSON.stringify(results));
alert(JSON.stringify(positions));    
</script>
<body> 
</body> 
</html>​
于 2012-12-03T13:06:16.750 に答える