質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

5回答

274閲覧

各配列から最大値を取得したい

okino

総合スコア10

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2018/11/02 09:07

前提・実現したいこと

javaScriptで配列を作り、その配列から最大値を取得するプログラムを作っています。

var ary = [
[92, 90, 68, 86], //92
[78, 100, 96, 80], //100
[68, 45, 88, 75]]; //88

[92,100,88]というようにしたいのですが出力がうまくいかず、、、
3つ表示ができません。

「エラー」
SCRIPT438: Object doesn't support property or method 'push'

該当のソースコード

ソースコード function counts2() { var result = new Array(); var max1 = 0; for (i = 0; i < ary.length; i++) { for (j = 0; j < ary[i].length; j++) { if (max1 < ary[i][j]) { max1 = ary[i][j]; result = max1; result.push(ary[i][j]); } else if (max1 < ary[i][j]) { max1 = ary[i][j]; result = max1; result.push(ary[i][j]); } else if (max1 < ary[i][j]){ max1 = ary[i][j]; result = max1; result.push(ary[i][j]); } } } console.log(result); }

試したこと

console.logの位置が違うのかと場所を変えてみたり、(max1 < ary[i][j])→(max1 < ary[i])に変えて一つ一つ試してみました。(あまり関係がないかもしれませんが)

補足情報(FW/ツールのバージョンなど)

Application Insights Tools for Visual Studio

最近始めたばかりの初心者で、つたない質問ですが宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

質問のタイトルにある内容の回答ではありませんが、質問本文にあるエラーについて記述します

SCRIPT438: Object doesn't support property or method 'push'

pushなんてプロパティもしくはメソッドなんてそのオブジェクトは持ってないよ
という意味です
実際にソースを見てみます

JavaScript

1max1 = ary[i][j]; // ここでmax1にaryの要素の一つを代入しています 2result = max1; // max1をresultに代入しているため、数値が入ってしまっています 3result.push(ary[i][j]); // resultは数値であって配列ではありませんのでpushメソッドが無いと怒られています

といった感じでresultの型が配列から数値に置き換わってしまっています
他の方の回答はそのまま目的を果たせる内容なのですが、こういった言語の仕様を間違えたままだとまたどこかで引っかかってしまうかと思いますので、ただ「コピペで動けば良いや」ではなく基礎をしっかりと身につけましょう

投稿2018/11/02 11:45

len_souko

総合スコア1337

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

javascript

1var a = [ 2 [92, 90, 68, 86], 3 [78, 100, 96, 80], 4 [68, 45, 88, 75], 5 ]; 6var b=a.map(function(x){ 7 return Math.max.apply(null, x); 8}); 9console.log(b);

投稿2018/11/02 09:12

yambejp

総合スコア114581

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

javascript

1let myArray = [ 2 [92, 90, 68, 86], 3 [78, 100, 96, 80], 4 [68, 45, 88, 75] 5]; 6let maxArray = myArray.map(o => o.reduce((a, b) => Math.max(a, b)));

高階関数大好き。

投稿2018/11/02 09:19

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんにちは。三通りのコードで回答します。

一つ目は、ご質問に挙げられているコードをベースに意図通り動くように修正したもので、二つ目と三つ目は、Array.prototype.map() を使った別解です。

(1) ご質問に挙げられているコードを修正したもの

javascript

1function counts2() { 2 var result = []; 3 4 for (var i = 0; i < ary.length; i++) { 5 var max = 0; 6 for (var j = 0; j < ary[i].length; j++) { 7 if (max < ary[i][j]) { 8 max = ary[i][j]; 9 } 10 } 11 result.push(max); 12 } 13 console.log(result); 14}

      

Array.prototype.map()を使った別解

(2) Math.max(), スプレッド構文を使う。

javascript

1var maxValues = ary.map(a => Math.max(...a));
(3) Lodashの _.max(array)を使う。

Lodashという、配列に対する様々な操作を集めた便利なライブラリがあります。これの中に、配列を引数として渡すと、その要素の最大値を返してくれるメソッド _.max(array) があるので、これを使うと以下のように書けます。

javascript

1var maxValues = ary.map(_.max); 2

なお、Lodash をCDNから使う場合のURLは、以下で分かります。

追記

ご質問の中に、

最近始めたばかりの初心者

とあったことと、ご質問に挙げているコードの状況から拝察しますと、ご自身の現状の学習方法(使っている書籍や学習サイト名、メンター的な指導者がそばにいるのかどうか、JavaScriptが初めてのプログラミング言語なのか、等)を提示して、それをどう改善していったらいいか?という主旨のご質問を、(この質問とは別に)投稿されるとよいかもしれません。

投稿2018/11/02 10:56

編集2018/11/03 12:37
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

未検証。
検証済のコードに修正。

JavaScript

1const array = [[92, 90, 68, 86],[78, 100, 96, 80],[68, 45, 88, 75]]; 2 3console.log(array.map(Function.prototype.apply.bind(Math.max, null))); // [92, 100, 88]

Re: okino さん

投稿2018/11/02 11:39

編集2018/11/03 03:25
think49

総合スコア18156

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

think49

2018/11/03 03:26

検証済のコードに修正しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問