1. ホーム
  2. javascript

[解決済み] ImmutableJSでリスト内の要素を更新するには?

2022-06-30 10:13:23

質問

公式ドキュメントの内容は以下の通りです。

updateIn(keyPath: Array<any>, updater: (value: any) => any): List<T>
updateIn(keyPath: Array<any>, notSetValue: any, updater: (value: any) => any): List<T>
updateIn(keyPath: Iterable<any, any>, updater: (value: any) => any): List<T>
updateIn(keyPath: Iterable<any, any>, notSetValue: any, updater: (value: any) => any): List<T>

普通のウェブ開発者(機能的なプログラマではない)がそんなことを理解するわけがない!

私は(非機能的なアプローチとしては)非常に単純なケースを持っています。

var arr = [];
arr.push({id: 1, name: "first", count: 2});
arr.push({id: 2, name: "second", count: 1});
arr.push({id: 3, name: "third", count: 2});
arr.push({id: 4, name: "fourth", count: 1});
var list = Immutable.List.of(arr);

どのようにすれば list という名前の要素で 第三 は、その カウント に設定されています。 4 ?

どのように解決するのですか?

最も適切なケースは findIndexupdate メソッドを使用します。

list = list.update(
  list.findIndex(function(item) { 
    return item.get("name") === "third"; 
  }), function(item) {
    return item.set("count", 4);
  }
); 

追伸:必ずしもMapを使えるとは限りません。例えば、名前がユニークでなく、同じ名前を持つすべてのアイテムを更新したい場合です。