javascript - 为什么使用 withMutations 会得到不同的结果?

标签 javascript immutable.js

我是否误解了它的目的或它的工作原理?

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。其目的是为您提供一个临时 Playground ,您可以在其中实际更改列表而不是创建副本。

一个例子是:

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

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

我认为你最好根本不使用withMutations。如果在某些时候您认为“如果我可以修改数组而不是制作副本,这会容易得多”,您可以转向 withMutations

关于javascript - 为什么使用 withMutations 会得到不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28361512/

相关文章:

javascript - 如何获取在 Discord.js 中发消息的用户的角色?

javascript - 在 Javascript 中使用实例 - @class、@param、@property、@augments

javascript - 通过 Uglify 将主干与压缩 View 结合使用

javascript - Redux 存储为 immutable.js 映射

javascript - JQuery AJAX header 授权 POST

javascript - 关于connection.end()在node.js mySQL模块中如何工作的困惑

javascript - 不可变 vs javascript 数组、对象——什么是正确的平衡点?

redux - Redux 状态下的数组列表

javascript - map() 函数内的索引

javascript - 将 Flux 存储中的 Immutable.js 映射与内部 React 组件状态合并