入力することで配列の最小値を取得できることを知っています
var min = Math.min.apply(null, array)
ただし、これらの値がある場合、これは配列の最小値を返します。たとえば、この値の id ではありません。
array[1] = 24;
array[2] = 45;
1 (最小値を保持している ID) を返すようにしたいのですが、どうすればよいでしょうか。この問題について誰か助けてもらえますか?
入力することで配列の最小値を取得できることを知っています
var min = Math.min.apply(null, array)
ただし、これらの値がある場合、これは配列の最小値を返します。たとえば、この値の id ではありません。
array[1] = 24;
array[2] = 45;
1 (最小値を保持している ID) を返すようにしたいのですが、どうすればよいでしょうか。この問題について誰か助けてもらえますか?
var index = array.indexOf(Math.min.apply(null, array));
Array#reduce()
必要に応じて配列の穴を避けながら、最小数を取得するために使用できます。
array.reduce(function(obj, n, i) {
if (n < obj.min)
obj.i = i;
return obj;
}, {min:Infinity,i:-1}).i;
または、パフォーマンスと互換性が懸念される場合は、単にループすることもできます。
var res = -1;
var min = Infinity;
for (var i = 0; i < array.length; i++) {
if ((i in array) && array[i] < min) {
min = array[i];
res = i;
}
}
次のように実行できます。
var id = array.indexOf(Math.min.apply(null, array));
値を取得したら、次indexOf
のように使用してインデックスを取得できます。
var index = array.indexOf(Math.min.apply(null, array));
indexOf
は最近 JavaScript (正確には ES5/JS 1.6) に組み込まれたばかりなので、関数が存在しない場合はラッパーを見つける必要があることに注意してください。
詳細については、MDNを参照してください (後方互換性のある関数の実装例が含まれています)。
最小値を見つけるアルゴリズムと同じですが、最小インデックスも追跡する必要があります
function minIndex(arr) {
if (!arr || arr.length === 0) {
return -1;
}
var min = arr[0];
var minIndex = 0;
for (var len = arr.length; len > 0; len--) {
if (arr[len] < min) {
min = arr[len];
minIndex = len;
}
}
return minIndex;
}
このフィドルをチェックしてください