我是否误解了它的目的或作用方式?

var menuItems = Immutable.List.of(
  { parent_id: 0, id: 1 },
  { parent_id: 1, id: 2 },
  { parent_id: 1, id: 3 }
);

var results1 = menuItems
  .filter(function(menuItem) { return menuItem.parent_id === 1; }) // Filter out items with parent_id = 1
  .sort(function(childA, childB) { return childA.sort_order - childB.sort_order; }); // Sort them by sort_order

var results2 = menuItems.withMutations(function(list) {
  list
    .filter(function(menuItem) { return menuItem.parent_id === 1; }) // Filter out items with parent_id = 1
    .sort(function(childA, childB) { return childA.sort_order - childB.sort_order; }); // Sort them by sort_order
});

console.log(results1.size); // 2
console.log(results2.size); // 3


我的理解是,它们将产生相同的结果,但是由于操作链的原因,withMutations将更快。

最佳答案

您误解了withMutations。这样做的目的是为您提供一个临时场所,您可以在其中实际更改列表而不是创建副本。

一个例子是:

var results2 = menuItems.withMutations(function(list) {
  list.shift()
});


在代码中,在withMutations中使用filter。筛选器创建一个新数组,并且不修改原始数组,因此您的withMutations不执行任何操作。

我认为您最好完全不使用withMutations。如果在某个时候您认为“如果仅修改数组而不是进行复制,这会容易得多”,则可以转到withMutations

09-25 18:33