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

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

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

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

Q&A

解決済

2回答

196閲覧

JavaScriptにおける配列の型について

Fujisaki_prpr

総合スコア21

JavaScript

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

0グッド

0クリップ

投稿2017/09/30 16:14

編集2017/09/30 16:29

JavaScriptを触って見ることにしました。
これまで触ったことのある言語(C++,Haskell)では、こんなことはできなかったのでとても不思議に思っています。

JavaScript

1var arr = ["One", 1, true];

###質問
この配列をソートすることは可能でしょうか?
ソートは真偽値、数値、文字列の順に並び替え、同じ型についてはデフォルトの昇順とします
また、このような配列の作成を許すことによってどのようなメリットがあるのでしょうか?

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

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

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

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

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

kei344

2017/09/30 16:21

「これまで触ったことのある言語」は具体的に書かれたほうが良いと思います。「ソート」とありますが、何順で並べるのでしょうか。
guest

回答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

kei344

総合スコア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

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問