0

私には4つの数字がありますが、同じである可能性がありますが、おそらく異なる可能性があります。基本的に、この関数で等しい数を選択しないようにしますが、そうでない場合は最も低いものを選択し、同じものが2つある場合は、そのうちの1つを選択してそれを使用します。

たとえば、、、、、およびが3434あり3396ます。さて、最初の関数など、すべて同じかどうかを関数に返してもらいたいと思います。したがって、この状況では、私は返される必要があります。34143374014

しかし、数字が、、、である場合、321それ576812321に返されます1

私はここ数日ここにいますが、私がしなければならないことをする方法を見つけることができないようです。誰かがこれを魔法のように機能させることができる何かを知っていますか?ありがとう!

編集 私のアプローチでは、配列を作成して並べ替え、最後の結果を使用しようとしましたが、配列を並べ替えると、キーが混乱するため、どの値に属しているのかわかりません

 var choices = new Array();
 choices[1] = parseInt(value1);
 choices[2] = ...
 choices = choices.sort();
 //and then I ran into the problem that my keys being not starting 
 //with 0, it added an element which I was able to remove by doing this
 choices = choices.splice(0,4);

そして、私はそこで立ち往生しています

4

1 に答える 1

2

これがあなたの質問に答える旅の始まりです。他の人が指摘しているように、このコードはあなたが言及したすべてのケースを処理するわけではありません。これは意図的なものです。

番号のリストから最小の番号を選択するにはどうすればよいですか?

手巻きの方法; O(n)と1つのパス:

var myList = [3434, 3396, 3414, 3374];
var min = Infinity;
var minIndex = -1;
var current;

for (var i=0; i<myList.length; i++)
{
    current = myList[i];
    if (current < min)
    {
        min = current;
        minIndex = i;
    }
}

// the value you want is in minIndex

はるかに簡潔。またO(n)、2つのパスが配列を通過します。

var min = Math.min.apply(null, myList);
var minIndex = myList.indexOf(min);

NB Array.indexOfは、IEの古いバージョンではシムを必要とします。


基本的に私はこの関数がそれらの数が等しいものを選択しないようにしたい

彼らが言うように、この演習は読者に任されています。

于 2012-09-03T03:18:43.367 に答える