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

javascriptの
配列の要素が文字列で返ってくる場合、
var graph1_array = ["3","5","10","30","33","1","6"];

最大値のインデックスを知る良い方法はありますでしょうか。
Number()などは、変数を数値変換するもので、配列を数値に
変えてくれるメソッドはないようです。。。

最大値のインデックスは、要素が文字列のため、現状-1で返ってきてしまいます。

●質問者: nagayaki
●カテゴリ:ウェブ制作
✍キーワード:JavaScript Number インデックス メソッド 変数
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● chrono1742
●27ポイント

逐次、Number関数を使って比較することで計算できますよ。

http://www.24w.jp/study_contents.php?bid=javascript&iid=javascri...


<script type="text/javascript">
function getMaxId(arr) {
 if (arr.length == 0) {
 return -1;
 }
 var maxId = 0;
 for (var id = 1; id < arr.length; id++) {
 if (Number(arr[id]) > Number(arr[maxId])) {
 maxId = id;
 }
 }
 return maxId;
}

var graph1_array = ["3","5","10","30","33","1","6"];
var maxId = getMaxId(graph1_array);

document.write(maxId);
</script>
◎質問者からの返答

やはり逐次していくしかないのですね。。。


2 ● GoldenDawn
●63ポイント

前質問の回答のやり方を拝借して……

Math.max は数値に直してくれるので indexOf に渡すときに toString で文字列に戻してやります。

// IE 対策。他のライブラリ等で indexOf が補われているなら不要
if (!Array.prototype.indexOf) Array.prototype.indexOf = function(v) {
 for (var i = 0; i < this.length; ++i) if (this[i] == v) return i ;
 return -1 ;
}

Array.prototype.maxStringValueId = function() {
 return this.indexOf(Math.max.apply(null, this).toString()) ;
}

var graph1_array = ["3","5","10","30","33","1","6"] ;

alert(graph1_array.maxStringValueId()) ;

前質問のコメントに書こうかと思いましたがついでなのでこちらに。

IE には indexOf がないのでコードに書いたように補ってやる必要があります。

また要素数が多いと WebKit は apply でスタックがオーバーフローします。

手元の環境では

Google Chrome 2.0.172.43 : 130980

Safari 4.0.3 : 524246

を超える要素数でアウトです。

http://q.hatena.ne.jp/

◎質問者からの返答

早速のレスありがとうございます。prototypeは使ったことがないです。。。

jqueryを使うとどんな感じになるのでしょう・・・


3 ● regnif
●50ポイント ベストアンサー

前回ご質問の回答者です。

> 配列の要素が文字列で返ってくる場合、

> var graph1_array = ["3","5","10","30","33","1","6"];

> 最大値のインデックスを知る良い方法はありますでしょうか。

それこそ前回の私の回答(http://q.hatena.ne.jp/1252577402)で問題ないです。がIE問題があるようなのでGoldenDawnさんのやり方を拝借して。

<script language="JavaScript"></p> <p>if (!Array.prototype.indexOf) Array.prototype.indexOf = function(v) {</p> <p> for (var i = 0; i < this.length; ++i) if (this[i] == v) return i ;</p> <p> return -1 ;</p> <p>}</p> <p>var graph1_array = ["3","5","10","30","33","1","6"];</p> <p>var max = graph1_array.slice(0).sort(function(a,b){return (parseInt(b) - parseInt(a));})[0];</p> <p>var index = graph1_array.indexOf(max);</p> <p>alert("max:" + max + "/index:" + index);</p> <p></script>

でしょうか。

前回の配列は数値だったので、コメントには、parseInt不要と書いています。

◎質問者からの返答

前回はありがとうございました。

prototypeを使わない場合、どのようなコードになりますでしょうか。

関連質問


●質問をもっと探す●



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