Immutable.jsのList.merge()とList.concat()の挙動の違い

Immutable.jsのListmerge()Listを結合できると思っていたら違った。

const a = Immutable.List([
    {item_name: 'apple'},
    {item_name: 'chicken'}
])

const b = Immutable.List([
    {item_name: 'car'}
])

こんな感じでリストがあって結合したいと思ったとき、ドキュメントを読むとmerge()でできそう。

しかしmerge()ではできません。concat()を使います。

merge()concat()を比べてみます。

console.log(a.merge(b).toJS())

// Console
// [Object {
//   item_name: "car"
// }, Object {
//   item_name: "chicken"
// }]

// This is what I want to do
console.log(a.concat(b).toJS())

// Console
// [Object {
//   item_name: "apple"
// }, Object {
//   item_name: "chicken"
// }, Object {
//   item_name: "car"
// }]

merge()は配列のインデックスを元に merge しています。{item_name: 'apple'}a[0]です。{item_name: 'car'}b[0]と同じインデックスであるため、マージされてしまいます。

concat()は素直にaのListにbのListを連結していることがわかります。

List.merge()の挙動について少し勘違いをしてました。

Leave a Reply

Your email address will not be published. Required fields are marked *