配列の要素が文字列で返ってくる場合、
var graph1_array = ["3","5","10","30","33","1","6"];
最大値のインデックスを知る良い方法はありますでしょうか。
Number()などは、変数を数値変換するもので、配列を数値に
変えてくれるメソッドはないようです。。。
最大値のインデックスは、要素が文字列のため、現状-1で返ってきてしまいます。
前回ご質問の回答者です。
> 配列の要素が文字列で返ってくる場合、
> 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不要と書いています。
逐次、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>
やはり逐次していくしかないのですね。。。
前質問の回答のやり方を拝借して……
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
を超える要素数でアウトです。
早速のレスありがとうございます。prototypeは使ったことがないです。。。
jqueryを使うとどんな感じになるのでしょう・・・
前回ご質問の回答者です。
> 配列の要素が文字列で返ってくる場合、
> 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を使わない場合、どのようなコードになりますでしょうか。
前回はありがとうございました。
prototypeを使わない場合、どのようなコードになりますでしょうか。