Immutable.js 3.8 と 4.0 で Record オブジェクト で map()メソッド を使う方法が異なる

  • Immutable.js

    • immutable を JavaScript で実現してくれる
    • 不変性(= immutable = 元となっているオブジェクトに変更を加えない、加えられない状態)を保ってくれるクラスの集まり
  • immutable.js の Record オブジェクト

  • Map = 連想配列

    • ES2015 から Map が使える
    • ES2015 以前は Object を連想配列として使っていた
    • Object は連想配列として使うには欠点があるので、ES2015 から連想配列として Map が用意された
  • map() メソッド

    • 与えられた callback 関数を配列の順番通りに、各要素に対して一度ずつ呼び出し、その結果から新しい配列を生成
  • forEach() vs map()

    • forEach()
      • 返り値はない
    • map()
      • 返り値として新しい配列を返す

immutable.js 3.84.0では Record オブジェクト で map()メソッド を使う方法が異なる

  • 3.8: Recordオブジェクト.map()
  • 4.0: Recordオブジェクト.toSeq().toMap().map()

サンプル

// 3.8 の場合

import { Record } from 'immutable';

// 「限定されたプロパティ」の定義
const fields = {
  field_1: '',
  field_2: '',
};

export class Test extends Record(fields)
{
}

// immutable.jp の Record クラスのインスタンス = Record オブジェクト
const obj = new Test(),

// .map
obj.map((...arg) => {
  console.log(arg[1]); //field_1, field_2
});
// 4.0 の場合
import { Record } from 'immutable';

// 「限定されたプロパティ」の定義
const fields = {
  field_1: '',
  field_2: '',
};

export class Test extends Record(fields)
{
}

// immutable.jp の Record クラスのインスタンス = Record オブジェクト
const obj = new Test(),

// .map
obj.toSeq().toMap().map((...arg) => {
  console.log(arg[1]); //field_1, field_2
});

(使い方が違うのはわかったが) 3.8 と 4.0 でどのような違いがあるのか?

下記のような違いがあるようですが、このあたりがまだ把握できていません