为什么使用 withMutations 会得到不同的结果?
Why do I get different results using withMutations?
我是不是误解了它的用途或它的工作原理?
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。 Filter 会创建一个新数组并且不会修改原始数组,因此您的 withMutations
什么都不做。
我认为你最好完全不使用 withMutations
。如果在某个时候你认为"this would be so much easier if I could just modify the array instead of making copies",你可以转向withMutations
。
我是不是误解了它的用途或它的工作原理?
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。 Filter 会创建一个新数组并且不会修改原始数组,因此您的 withMutations
什么都不做。
我认为你最好完全不使用 withMutations
。如果在某个时候你认为"this would be so much easier if I could just modify the array instead of making copies",你可以转向withMutations
。