JavaScriptを触って見ることにしました。
これまで触ったことのある言語(C++,Haskell)では、こんなことはできなかったのでとても不思議に思っています。
JavaScript
1var arr = ["One", 1, true];
###質問
この配列をソートすることは可能でしょうか?
ソートは真偽値、数値、文字列の順に並び替え、同じ型についてはデフォルトの昇順とします
また、このような配列の作成を許すことによってどのようなメリットがあるのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
【データ構造 - JavaScript | MDN】
https://developer.mozilla.org/ja/docs/Web/JavaScript/Data_structures
動的型付け
JavaScript は弱い型付けあるいは動的型付けの言語です。これは、あらかじめ変数の型を宣言する必要がないということです。型はプログラムを処理している間に、自動的に決められます。また、異なる型で同じ変数を持つことができるということでもあります
同じく「動的型付けの言語」のPHPも下記のような書き方が可能です。
【PHPの型と型安全について(PHP7からのPHPプログラミング) - Qiita】
https://qiita.com/bokotomo/items/1ead446ef689dc45b487
PHP
1$arr = [ 2 true, 3 1, 4 0.3, 5 "OK", 6 [1, 2], 7 ["a"=>1, "b"=>2], 8 new Controller, 9 fopen("test.txt", "r"), 10 NULL 11];
PHP JavaScript Perl Python Ruby などWebでよく使われる言語の多くが「動的型付けの言語」です。
【プログラミング言語の比較 - Wikipedia】
https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%E3%81%AE%E6%AF%94%E8%BC%83
ソートは [0,true,"01"].sort( function( a, b ){ /**/ } )
のように関数で処理することもできるので、typeof 演算子を絡めれば「真偽値、数値、文字列の順」も実現可能です。
【Array.prototype.sort() - JavaScript | MDN】
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
【typeof 演算子 - JavaScript | MDN】
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/typeof
投稿2017/09/30 16:54
総合スコア69407
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
記載されている配列のソートは可能です。
javascript
1var arr = ["One", 1, true]; 2arr.sort(); 3// => [1, "One", true]
上記のソートは文字列として比較されています。
javascript
1var arr = ["One", 1, true, false, "hoge", 2]; 2arr.sort(); 3// => [1, 2, "One", false, "hoge", true]
一般に動的型付き言語の実装では、扱う型の限定を行わず、同じように扱います。
それにより、事前定義なく実行時に決定されるような値についても柔軟な対応が可能です。
必要に応じて数値や真偽値等を厳密に扱うことも可能です。
javascript
1var arr = ["One", 1, true]; 2for (let i of arr) { 3 console.log(i + ": " + typeof(i)); 4} 5/* 6One: string 71: number 8true: boolean 9*/
追記:
更新頂いたソート条件を実装すると下記のようになるでしょうか。
もっとすっきりした書き方もあるかもしれません。
javascript
1function compare(a, b) { 2 if (typeof(a) == typeof(b)) { 3 if (a < b) { 4 return -1; 5 } else { 6 return 1; 7 } 8 } else { 9 if (typeof(a) < typeof(b)) { 10 return -1; 11 } else { 12 return 1; 13 } 14 } 15} 16 17var arr = ["One", 1, true]; 18arr.sort(compare); 19// => [true, 1, "One"] 20 21arr = ["One", 1, true, false, "Two", 3, 2, "Three"]; 22arr.sort(compare); 23// => [false, true, 1, 2, 3, "One", "Three", "Two"]
投稿2017/09/30 16:45
編集2017/09/30 17:07退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。