計算機科学のブログ

コレクションを学ぶ 配列、メソッド(map、reduce)、高階関数、Mapの生成、メソッド(get、set)、ジェネレーター関数、yieldキーワード、フィボナッチ数列

ハンズオンJavaScript (あんどうやすし(著)、オライリー・ジャパン)の7章(コレクションを学ぶ)、7.10(練習問題)の7-1、7-2、7-3、7-4の解答を求めてみる。

コード

console.log('7-1');
let nums = [1, 4, 5];

console.log(
    nums
        .map(x => x ** 2)
        .reduce((t, x) => t + x)
);
console.log(nums);

console.log('7-2');

// 出力結果: v2
let map = new Map([['k1', 'v1']]);
map.k1 = 'v2';
console.log(map['k1']);
console.log(map);

// v1を取得するにはgetメソッドを使用
console.log(map.get('k1'));
console.log(map);
// マップのキーk1の値を変更するにはsetメソッドを使用
map.set('k1', 'v2');
console.log(map.get('k1'));
console.log(map);

console.log('7-3');
let ns = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
    s = new Set(ns),
    a = Array.of(...s);

console.log(ns);
console.log(s);
console.log(a);

console.log('7-4');
let fibGen = function* () {
    a = 0;
    yield a;
    b = 1;
    yield b;
    let c = a + b;
    while (true) {
        yield c;
        [a, b] = [b, c];
        c = a + b;
    }
};

fib = fibGen();
for (let i = 0; i <= 50; i += 1) {
    console.log(`${i}: ${fib.next().value}`)
}

入出力結果(Terminal, Zsh)

% node main.js
7-1
42
[ 1, 4, 5 ]
7-2
v2
Map(1) { 'k1' => 'v1', k1: 'v2' }
v1
Map(1) { 'k1' => 'v1', k1: 'v2' }
v2
Map(1) { 'k1' => 'v2', k1: 'v2' }
7-3
[
  31, 28, 31, 30, 31,
  30, 31, 31, 30, 31,
  30, 31
]
Set(3) { 31, 28, 30 }
[ 31, 28, 30 ]
7-4
0: 0
1: 1
2: 1
3: 2
4: 3
5: 5
6: 8
7: 13
8: 21
9: 34
10: 55
11: 89
12: 144
13: 233
14: 377
15: 610
16: 987
17: 1597
18: 2584
19: 4181
20: 6765
21: 10946
22: 17711
23: 28657
24: 46368
25: 75025
26: 121393
27: 196418
28: 317811
29: 514229
30: 832040
31: 1346269
32: 2178309
33: 3524578
34: 5702887
35: 9227465
36: 14930352
37: 24157817
38: 39088169
39: 63245986
40: 102334155
41: 165580141
42: 267914296
43: 433494437
44: 701408733
45: 1134903170
46: 1836311903
47: 2971215073
48: 4807526976
49: 7778742049
50: 12586269025
%