例えば、下記の配列があった場合、
var graph1_array = [3,5,10,30,33,1,6];
どのように書くと、最大値33のキー[4]を取得できるのでしょうか。
var arr = [3,5,10,30,33,1,6]; alert( arr.indexOf(Math.max.apply(null,arr) ); //=> 4
hanabc さんのコードよりも倍ぐらい速いです。
配列をソートするようなのに比べると10倍〜100倍速いです。
こんな感じでどうでしょう。
function getMaxId(arr) { if (arr.length == 0) { return -1; } var maxId = 0; for (var id = 1; id < arr.length; id++) { if (arr[id] > arr[maxId]) { maxId = id; } } return maxId; } var graph1_array = [3,5,10,30,33,1,6]; var maxId = getMaxId(graph1_array); // maxId => 4
なお、配列のサイズが0の場合は-1を返しています。
ちょっとコードが長いですね。。。
function getMaxId(arr) { var sorted = arr.concat().sort(function(x, y){return y - x;}); //arrの内容を変えずに降順ソート、最大値はsorted[0] for(var i = 0; i < arr.length; i++) { if(arr[i] == sorted[0])return i; } return -1 } var graph1_array = [3,5,10,30,33,1,6]; WScript.Echo(getMaxId(graph1_array)); // 4
hanabcさんの内容と違うのは、graph1_arrayの要素数が大きい時に、
処理時間に差が出てくる点です。
(hanabcさんのは全ての値を調べますが、私のは最大の要素を見つけた時点で終了します)
処理時間は大切なポイントだと思います。
var graph1_array = [3,5,10,30,33,1,6];
var max = graph1_array.slice(0).sort(function(a,b){return (parseInt(b) - parseInt(a));})[0];
var index = graph1_array.indexOf(max);
alert("max:" + max + "/index:" + index);
参考URL
配列の要素(値)から最大値を取得する
http://www.24w.jp/study_contents.php?bid=javascript&iid=javascri...
配列を数字順にソートする
http://javascript-memo.seesaa.net/article/24833503.html
配列要素を検索する
http://www.openspc2.org/JavaScript/Ajax/ref/prototype.js/ver1.4/...
var arr = [3,5,10,30,33,1,6]; alert( arr.indexOf(Math.max.apply(null,arr) ); //=> 4
hanabc さんのコードよりも倍ぐらい速いです。
配列をソートするようなのに比べると10倍〜100倍速いです。
凄すぎです。。。
凄すぎです。。。