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

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

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

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

Q&A

2回答

424閲覧

sortメソッドの引数について

newyee

総合スコア213

JavaScript

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

0グッド

0クリップ

投稿2018/08/18 11:28

sortメソッドにつきまして、いまいち理解することができずご質問させていただきました。
お聞きしたい内容は以下のコードに関してです。

javascript

1var classes = ['部長','課長','主任','担当']; 2 3 var members = [ 4 { name: '鈴木清子', clazz: '主任' }, 5 { name: '山口久雄', clazz: '部長' }, 6 { name: '井上太郎', clazz: '担当' }, 7 { name: '和田和美', clazz: '課長' }, 8 { name: '小森雄大', clazz: '担当' }, 9 ]; 10 11 console.log(members.sort(function(x,y) { 12 return classes.indexOf(x.clazz) - classes.indexOf(y.clazz); 13 }))

上記の「return classes.indexOf(x.clazz) - classes.indexOf(y.clazz);の部分では、indexOfメソッドの返り値が引数「x」,「y」の値となっていると思うのですが、このように、「引数.キー名」とし、メソッドの返り値をそのまま引数の値とするような書き方は、sortメソッドだけでなく、どのようなメソッドでも可能なやり方なのでしょうか?
どなたか、ご解説くださる方いらっしゃいましたら、ご教授の程よろしくお願いします。

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

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

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

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

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

jun68ykt

2018/08/18 13:32 編集

こんにちは。回答ではないのでこちらに書きます。ご質問の文中にある「indexOfメソッドの返り値が引数「x」,「y」の値となっていると思う」というところが、「思う」とお書きになっているとおり、理解が曖昧になっている所だと思います。そこで、ご質問に挙げられているコードのsort()の引数に与えている function(x, y) の本体で、1ステップずつ変数に入れて console.log してみるものを https://jsfiddle.net/jun68ykt/dqr1aw2c/12/ に作りましたので、出力された結果を参考に、回答者の方々からのご回答もよく読みなり、理解が曖昧なところをはっきりさせるとよろしいかもしれません。
newyee

2018/08/19 00:19

ご丁寧にありがとうございます。作って頂きましたコードを拝見させていただきました。x,yに代入されている値を確認することができ、理解することができました。ご丁寧に書いていただきありがとうございました。
jun68ykt

2018/08/19 02:16 編集

ご返信ありがとうございます。今後JavaScript を得意な言語として習得されたいのであれば、基礎学習のための書籍で定評あるものを、一度じっくり読まれることをお勧めします。私がお勧めするのは 「徹底マスター JavaScriptの教科書 プログラミングの教養から、言語仕様、開発技法までが正しく身につく」 https://www.amazon.co.jp/dp/4797388641 ですが、他に合うものがあればそちらを選んでもよいでしょう。いずれにせよ、何らか信頼のおける基本書を写経した後、「開眼 javascript 言語仕様から学ぶjavascriptの本質」 https://www.amazon.co.jp/dp/487311621X/ で細部を点検すると、JavaScriptを利用するユーザーとして身につけるべき、ES6が出てくる前のJSの基礎はほぼ大丈夫といえると思います。その上でES6以降の新しい構文をひとつひとつ取り込んでいけば、確実に新しい構文を使いこなせて効果的です。基礎の習得は地道で大変ですが、必ず実を結びますのでぜひ取り組まれるとよいと思います。
newyee

2018/08/19 02:19

ご丁寧にありがとうございます。現在javascriptを勉強するうえで使用している参考書は、「javascript本格入問」という本なのですが、もしかしたら、もう少し簡単なものから初めて見る必要があるかもしれないと思っております...教えて下さった参考書も一度調べてみたいとおもいます。ご親切にありがとうございました。とにかく地道に頑張っていきたいと思います...
jun68ykt

2018/08/19 02:31 編集

頑張ってください! 参考までに手前味噌で恐縮ですが、先に挙げた「開眼 javascript 言語仕様から学ぶjavascriptの本質」のサンプルコードのリンク集を以下に作成しています。 https://qiita.com/jun68ykt/items/5aee04682f95f2354398 こちらを見て頂くと、この本ではどういうコードで基礎を確認するのかが何となく分かると思います。もしよければお手すきのときにご覧下さい。
newyee

2018/08/20 01:31

ご丁寧に教えてくださりありがとうございました。リンクの方、参考にさせて頂きたいと思います。
guest

回答2

0

文意が不明なので、逐語的に回答します。

indexOfメソッドの返り値が引数「x」,「y」の値となっていると思うのですが、

いいえ。indexOfの返り値は、xやyでなく、'部長'等の引数が、classes配列の中で何番目にあるかです。

メソッドの返り値をそのまま引数の値とするような書き方は、sortメソッドだけでなく、どのようなメソッドでも可能なやり方なのでしょうか?

引数には、どんな値でも与えることが出来ます。特に制約はありません。

投稿2018/08/18 13:04

otn

総合スコア84423

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

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

newyee

2018/08/19 00:07

ご回答ありがとうございます。 ご質問の内容が分かりにくく、申し訳ないです。 ご質問させて頂いた部分にあります、「indexOfメソッドの返り値が引数「x」,「y」の値となっていると思う」ここの部分なのですが、indexOfメソッドの引数にプロパティを指定し、その返り値の数値が、ドットで繋げられた、「x,y」に代入されていると思うのですが、今回の場合ですと、「引数.プロパティ」となっているのですが、ドットで結合することのよって返り値の数値を、今回の場合ですと「引数」の部分に代入される、というように理解して良いのかどうか分からずご質問させて頂いたんですよね...
otn

2018/08/19 00:28 編集

> その返り値の数値が、ドットで繋げられた、「x,y」に代入されていると思うのですが、 そんなことはありません。 > 引数.プロパティ」となっているのですが、ドットで結合することのよって返り値の数値を、今回の場合ですと「引数」の部分に代入される、 意味不明です。 sortの学習に進む前に、「関数とは何か」「引数とは何か」「関数の返値とは何か」をきっちり理解した方が良いと思います。
guest

0

すみません、何が疑問なのか、もう少し詳しく書いていただけないでしょうか。

JavaScriptでは、returnの後にはどんな式でも置けます。そして、引数も通常の変数と同様、プロパティを取ることができます。逆に「返り値に引数を使ってはいけない」なんてルールは、まったくありません。

投稿2018/08/18 12:52

maisumakun

総合スコア145121

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問