1

これと同様の質問がされていることは承知していますが、これらに目を通したところ、a) それらがどのように機能するか、b) 目的に合わせてそれらをどのように適応させることができるかについて、完全に困惑しています。したがって、私は新しい質問を開始しました。

4 つのインデックスのみの配列があり、各インデックスには数値が保持されます。私の目的は、この配列の最小値を見つけて、その最小値のインデックスを返すことです。これは問題ありませんでした...

最小値が複数のインデックスで繰り返されると、問題が発生します。

この場合、私が望むのは、最初に配列で「カウント」を実行して、最小値が繰り返されるかどうかを確認できるようにすることです。次に、カウントが >1 の場合は、次のようにします。繰り返される値のインデックスを見つけます、最後に、これらのインデックスの値を取得し、それらの間の最小値を見つける前にさらに計算を行う必要があります。

例:

    array[ 12.44 , 10.33 , 17.45 , 10.33]
    //First I need a count to find the number of times the lowest value (10.33) occurs
    //Then I would like a function to return either a string containing 1,3 to 
    //represent the indices, or an array[ 1 , 3 

この質問がすでに回答されている場合はもう一度お詫び申し上げますが、以前の回答を理解しようと何度も試みましたが、うまくいかないため、回答を説明していただけますか。

jsを使用して配列内で繰り返される値を見つけるのはなぜ複雑なのですか?

あなたの助けと時間を前もってありがとう!

ジョン

4

3 に答える 3

1

純粋なJSでこの方法はどうですか?

var myArr = [12.44 , 10.33 , 17.45 , 10.33];  //Your array    
var lowest = Math.min.apply(Math, myArr);     //Find the lowest number
var count = 0;                                //Set a count variable
var indexes = [];              //New array to store indexes of lowest number

for(var i=0; i<myArr.length;i++) //Loop over your array
{
    if(myArr[i] == lowest) //If the value is equal to the lowest number
    {
       indexes.push(i); //Push the index to your index array
       count++;         //Increment your counter
    }
}
alert(count);           //2
alert(indexes);         //1, 3

とここで動作するjsFiddle

于 2012-04-27T09:20:52.647 に答える
0

フィルタを作成して、すべての重複を除外し、その後、一時的な配列に対して魔法を実行して、目的の数を取得することができます。例えば

var arr      = [ 12.44 , 10.33 , 17.45 , 10.33],
    filtered = [ ],
    lowest;

arr.forEach(function( value ) {
    if( filtered.indexOf( value ) === -1 )
        filtered.push( value );
});

lowest = Math.min.apply( null, filtered );  // 10.33
arr.indexOf( lowest ); // 1
于 2012-04-27T09:11:42.323 に答える
0
var arr = [12.44, 10.33, 17.45, 10.33],
    lowest = Math.min.apply(Math, arr), //.. 10.33
    index = $.map(arr, function(o,i) { if (o === lowest) return i; }), //.. [1,3]
    numOfTimes = index.length; //.. 2

説明:

Math.min関数です。function.call(context, param1, param2, paramEtc...)またはを使用して、任意の関数を呼び出し、その関数のコンテキストを変更できますfunction.apply(context, param[])

Math.minMath.min(arr)パラメータのコンマ区切りリストを想定しているため、を呼び出して配列を渡すことはできません。だから私たちはその面白い構文を持っていますMath.min.apply(Math, arr)

$.map()は便利なイテレータです。任意のメソッドを使用してインデックスの配列を取得できます。

于 2012-04-27T09:13:20.127 に答える