0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TypeScript入門③配列

Posted at

配列リテラル

配列リテラルとは、要は複数のデータの集まりのこと。

let list : string[] = ['BELOVED', 'SOUL LOVE', '誘惑'];

実はそんなに今までと何かが変わるわけじゃないことが分かる。

自由に出し入れできるか
どんな名前か

どんな型か
配列か

これを定義しているだけ。
変数を定義するときはこの情報が必要なんだから、順番は分からずとも、どこかにこのパーツのいずれかがはいることが分かる。

応用!ユニオン型

型を定義する箇所がある。
ということはそこは自在に型を定義できる。
そう、ユニオン型だ。

let list : (string | boolean) = [true,'サウンドスケープ','DREAM SOLISTER' ];

こんな形で「この型かこの型ね」というのを配列に定義できる。

応用!列挙型

列挙型とはなにか。
そう、定数をまとめて定義できるというアレ。
そんなもん、配列使えばいいじゃないか!とずっと思っていたあれ。
あれって、ただの定数まとめじゃなくて、そういう「型」を作ってるんじゃないか?
と思った。で、実行してみたら行けた。

enum Metalgear {
    sneak = 'スネーク',
    fox = 'サイボーグ忍者',
    kazu = 'カズ',
}

let list3: Metalgear[] = [Metalgear.fox,];

console.log(list3);

配列の別の定義の仕方

あるんかい!

let list: Array<stirng> = [x, y, z];
// これと同じ(xyzには文字列が入ってるとして・・・)
let list: string[] = [x, y, z]

readonly

読んで字のごとく、読み取り専用。
これを書いた配列は読み取りしかできなくなる。
変数に代入したり、何かを追加したりができなくなる

 let list : readonly string[] 

配列の分割代入

配列の要素のうち、特定のいくつかをある変数に入れたり、配列に入れたりできる。

let soldier:Array<string> = [
'ビッグボス',
'オセロット',
'和平',
]

let list[x,y] = soldier;

//結果は[ビッグボス、オセロット]

別の配列にある配列を入れようとすると、前から要素の数だけ順番に入れる。

let [,,z] = soldier

console.log(z) // zに三つ目の値がはいる

//こうやると前のふたつをスキップして三つ目だけ入れるよ、みたいなことができる
//注意すべきはletのあとに変数名が来ないこと。

スプレッド構文

配列の中身をおっぴろげる。=スプレッド
中身を全部展開して代入する

let list = [...x]
let soldier:string[] = [
    'ビッグボス',
    'オセロット',
    '和平',
    ];

let x =[...soldier]
// xの中身は
[
    'ビッグボス',
    'オセロット',
    '和平',
];

いや、ちょっと待って
冷静に考えてこれなんの意味あるの?
と思った人はセンスある。

これは配列のコピーに使う。
いや、それは

let soldier: string [] = [
    'ビッグボス',
    'オセロット',
    '和平',
];

let listcopy = soldier;

ってやればいいじゃんと思うはず。

でもこれはすごく危険。なぜならこれは参照渡しで、コピーじゃないから。
配列はオブジェクトである。
オブジェクトの代入は参照渡しである。
参照渡しとは、同じ場所にあるものを色んな所から参照すること。
だからある個所から、その本体にあくせすして値を書き換えると、それを参照している箇所すべてが変更される。
だから迂闊にはやれない。やっちゃいけないわけじゃない。

そんなときに参照じゃなくて、コピーがしたい、ってなるはず。

let list:string[] = [...soldier]

ちなみに配列をふたつくっつけるとかもできる.これはいい!

[...soldier...soldier]

繰り返して配列の中身全部出してみた

for of という最高の文がある

let soldier: string [] = [
    'ビッグボス',
    'オセロット',
    '和平',
];

for (let soldier of soldiers) {
    console.log(soldier);
}

ofの前後がどっちだけ?ってなりそうだが
私はone of themで覚えた。
一部 of 全体
ってかんじ。
大事なのはlet を oneの方に付けること。
oneはここで初めて定義する変数なので、変数宣言をする必要がある。

他にも繰り返しの方法としてはArrayオブジェクトのメソッド、forEachとかがある。
が、for ofがあれば使わない気がするので割愛。
長いし。

ちなみに、breakで処理を終了できる

for (let soldier of soldiers) {
    console.log(soldier);
    if (soldier === 'オセロット') {
        // オセロットなら処理を終了
        break;
    }
}
0
0
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?