人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

javascriptで、配列の最大値のキーを取得するコードの書き方を教えて下さい。

例えば、下記の配列があった場合、
var graph1_array = [3,5,10,30,33,1,6];

どのように書くと、最大値33のキー[4]を取得できるのでしょうか。

●質問者: nagayaki
●カテゴリ:ウェブ制作
✍キーワード:JavaScript キー コード 配列
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● hanabc
●15ポイント

こんな感じでどうでしょう。

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を返しています。

◎質問者からの返答

ちょっとコードが長いですね。。。


2 ● van-dine
●20ポイント
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さんのは全ての値を調べますが、私のは最大の要素を見つけた時点で終了します)

◎質問者からの返答

処理時間は大切なポイントだと思います。


3 ● regnif
●29ポイント

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/...


4 ● edvakf
●70ポイント ベストアンサー
var arr = [3,5,10,30,33,1,6]; 

alert( arr.indexOf(Math.max.apply(null,arr) ); //=> 4

hanabc さんのコードよりも倍ぐらい速いです。

配列をソートするようなのに比べると10倍〜100倍速いです。

◎質問者からの返答

凄すぎです。。。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ