Immutable.Seq

seqの例 中間保存みたいな感じ

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>

Babel + JSX

class Task extends Immutable.Record({
  task: null,
  done: false
}) {}

class Tasks extends Immutable.Record({
  items: Immutable.Set()
}) {
  get __doneTasks() {
    return Immutable.List(this.items).filter(v => v.done);
  }

  getDoneTaskFirst() {
    return this.__doneTasks.first();
  }

  getDoneTaskLast() {
    return this.__doneTasks.last();
  }
}

let tasks = new Tasks();
(tasksData => {
  tasksData.forEach(data => {
    const task = new Task(data);
    const nextItems = tasks.items.add(task);
    tasks = tasks.set('items', nextItems);
  });
})([{
  task: 'foo',
  test: 'aaaa',
  done: true
}, {
  task: 'bar'
}, {
  done: true
}, ]);

console.log(tasks.toJS());
console.log(tasks.getDoneTaskFirst().toJS());
console.log(tasks.getDoneTaskLast().toJS());