私はこれを持っています:
var arr = [0, 21, 22, 7];
最も高い値のインデックスを別の変数に返す最良の方法は何ですか?
私はこれを持っています:
var arr = [0, 21, 22, 7];
最も高い値のインデックスを別の変数に返す最良の方法は何ですか?
回答:
信頼性が高く、古いブラウザで動作するため、これがおそらく最良の方法です。
function indexOfMax(arr) {
if (arr.length === 0) {
return -1;
}
var max = arr[0];
var maxIndex = 0;
for (var i = 1; i < arr.length; i++) {
if (arr[i] > max) {
maxIndex = i;
max = arr[i];
}
}
return maxIndex;
}
このワンライナーもあります:
let i = arr.indexOf(Math.max(...arr));
RangeError
ただし、必要な比較の2倍の比較を実行し、大規模な配列ではをスローします。機能にこだわる。
const max = arr.reduce((m, n) => Math.max(m, n))
のインデックスは[...arr.keys()].filter(i => arr[i] === max)
です。
[...arr.keys()]
エラーを出力します:unexpected token
一行で、おそらくより速くarr.indexOf(Math.max.apply(Math, arr))
:
var a = [0, 21, 22, 7];
var indexOfMaxValue = a.reduce((iMax, x, i, arr) => x > arr[iMax] ? i : iMax, 0);
document.write("indexOfMaxValue = " + indexOfMaxValue); // prints "indexOfMaxValue = 2"
どこ:
iMax
-最良の指標これまでのところ(最初の繰り返しで、これまでの最大要素のインデックス、iMax = 0
2番目の引数があるためreduce()
で0
、我々は二番目の引数を省略することはできませんreduce()
私たちの場合)x
-現在テストされている配列の要素i
-現在テストされているインデックスarr
-私たちの配列([0, 21, 22, 7]
)reduce()
メソッドについて( "JavaScript:The Definitive Guide" by David Flanagan):
reduce()は2つの引数を取ります。1つは、リダクション演算を実行する関数です。この削減関数のタスクは、2つの値を何らかの方法で結合または削減して単一の値にし、その削減された値を返すことです。
reduce()で使用される関数は、forEach()およびmap()で使用される関数とは異なります。使い慣れた値、インデックス、配列の値は、2番目、3番目、4番目の引数として渡されます。最初の引数は、これまでの削減の累積結果です。関数の最初の呼び出しでは、この最初の引数は、reduce()の2番目の引数として渡した初期値です。以降の呼び出しでは、関数の前回の呼び出しで返された値です。
初期値なしでreduce()を呼び出すと、配列の最初の要素が初期値として使用されます。つまり、リダクション関数の最初の呼び出しでは、1番目と2番目の引数として1番目と2番目の配列要素が使用されます。
arr.reduce((bestIndexSoFar, currentlyTestedValue, currentlyTestedIndex, array) => currentlyTestedValue > array[bestIndexSoFar] ? currentlyTestedIndex : bestIndexSoFar, 0);
、として記述することができる:反復配列は、インデックス0(第2パラメータ)から出発した場合、currentlyTestedValueはの要素の値よりも大きいbestIndexSoFar、戻りcurrentlyTestedIndexをとして次の反復にbestIndexSoFar。
this.methods.reduce((methodIndex, currentMethod, currentMethodIndex, methods) => currentMethod.price <= methods[methodIndex].price ? currentMethodIndex : methodIndex, 0)
。
編集:数年前、私はこれに対する答えを与えましたが、それは全体的で、具体的すぎ、複雑すぎました。だから私はそれを編集しています。上記の機能的な答えは、読みやすさではなく、きちんとした要素に適しています。しかし、私がjavascriptに慣れていれば、それも好きになるでしょう。
疑似コード:
最大値を含むインデックスを追跡します。最初はインデックス0が最大であると仮定します。現在のインデックスと比較してください。必要に応じて、インデックスを最大値で更新します。
コード:
var mountains = [3, 1, 5, 9, 4];
function largestIndex(array){
var counter = 1;
var max = 0;
for(counter; counter < array.length; counter++){
if(array[max] < array[counter]){
max = counter;
}
}
return max;
}
console.log("index with largest value is: " +largestIndex(mountains));
// index with largest value is: 3
var arr=[0,6,7,7,7];
var largest=[0];
//find the largest num;
for(var i=0;i<arr.length;i++){
var comp=(arr[i]-largest[0])>0;
if(comp){
largest =[];
largest.push(arr[i]);
}
}
alert(largest )//7
//find the index of 'arr'
var arrIndex=[];
for(var i=0;i<arr.length;i++){
var comp=arr[i]-largest[0]==0;
if(comp){
arrIndex.push(i);
}
}
alert(arrIndex);//[2,3,4]
シンプルな
maxarr: function(){
let maxval = 0;
let maxindex = null;
for (i = 0; i < arr.length; i++){
if (arr[i] > maxval) {
maxval = arr[i];
maxindex = i;
}
}
}