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?

More than 5 years have passed since last update.

Udacity: ES6 JavaScript Improved メモ③

Last updated at Posted at 2019-05-21

UdacityのES6 - JavaScript Improvedコースを、受講しながらメモしていきます。
Lesson3 Built-ins

##Symbols
新しく追加されたデータ型。
主に、オブジェクトのプロパティを特定するために使われる。
symbolを作るには、Symbol()を使用する。引数には文字列が入る。

example.js
const bowl = {
  'apple': { color: 'red', weight: 136 },
  'banana': { color: 'yellow', weight: 183 },
  'orange': { color: 'orange', weight: 170 },
  'banana': { color: 'yellow', weight: 176 } // 前に書いたbananaが上書きされる
};

この書き方だと、bananaというプロパティ名が重複するため、上書きされてしまう。
そこで…

example.js
const bowl = {
  [Symbol('apple')]: { color: 'red', weight: 136 },
  [Symbol('banana')]: { color: 'yellow', weight: 183},
  [Symbol('orange')]: { color: 'orange', weight: 170 },
  [Symbol('banana')]: { color: 'yellow', weight: 176 } // 上書きされない!
};

Symbol()を使うことで、プロパティ名の重複を許容することができる。
使いどころとしては、新しくメソッドなどを追加するとき。既存ライブラリとケンカせずに追加できる。

##Set①
Setは、値の重複がないオブジェクト、のことを指す。
配列とは異なり、インデックスによるアクセスができないという点に注意。

example.js
const sample1 = [1, 1, 2, 3]; // 値の重複があるため、セットといえない
const sample2 = [1, 2, 3, 4]; // 値の重複がないため、セットといえる

sample2はセットといえるがただの配列にすぎず、sample2.push(2)とすれば、2が重複する。
そこで、セットを作り出すnew Set()が追加された。

example.js
const foo = new Set(); // 空のセットを作成
console.log(foo);
// Set{}

const games = new Set(['Pokemon', 'Mario', 'Zelda', 'Pokemon']); // 値を入力して初期化も可能
console.log(games);
// Set(3) {"Pokemon", "Mario", "Zelda"}

gamesには'Pokemon'を重複して入力しているが、Setは重複を許さないため、自動的に削除される。

Setの追加・削除にはそれぞれ、add()delete()メソッドが使える。
全ての要素を一括削除するにはclear()メソッドが使える。
先ほど作成したgames変数を使って…

example.js
games.add('Kirby');
games.add('Donkey Kong');
games.delete('Mario');

console.log(games);
// Set(4) {"Pokemon", "Zelda", "Kirby", "Donkey Kong"}

games.clear(); //一括削除

console.log(games);
// Set(0) {}

セットの長さ(配列のlengthに相当)は、set.sizeのようにsizeプロパティで取得できる。

##Set②
values()メソッドは、イテレータオブジェクトを返す。
イテレータオブジェクトはnext()を使用して、格納された値を順番に取得できる。

example.js
const months = new Set(['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);

const iterator = months.values(); // 変数iteratorにイテレータオブジェクトを代入

console.log(iterator.next()); // {value: "January", done: false}
console.log(iterator.next()); // {value: "February", done: false}
console.log(iterator.next()); // {value: "March", done: false}

doneプロパティは、セットの最後に到達したかどうか、を表している。
つまり、trueになったら、セットの最後に到達したということ。

for...ofループを使えば、より簡単にアクセスできる。

0
0
0

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?