我正在使用immutable.js来开发我的flux应用程序。它非常有用,可以提高性能。但是让我感到遗憾的是,我不能与lodash一起使用它。Lodash提供了许多有用的API函数,因此我想知道是否有办法让它们一起为我工作?
map
),以及通过 Seq
实现的惰性链式调用,因此你应该研究一下它们。lodash
提供的功能而 immutable.js
没有,你可以将不可变对象转换为普通 JS 对象,以便被 lodash 使用。例如:// Do all of your fancy immutable.js stuff...
my_set = immutable.Set([1,2,3]).union(immutable.Set([2,3,4]))
// ...and then convert to JS before you do all of your fancy lodash stuff
mapped_set = _(my_set.toArray()).map(whatever)
map()
。您可能想要查看由我创建的https://github.com/engineforce/ImmutableAssign,它是一个轻量级不可变助手,支持不可变性,并允许您继续使用POJO(普通旧JavaScript对象)进行工作。因此,您可以使用任何lodash函数。
E.g.,
var iassign = require("immutable-assign");
var _ = require("lodash");
var o1 = { a: { c: 1 }, b: [1, 2, 3] };
var o2 = iassign(
o1,
function(o) { return o.b; }, // get property to be updated
function(b) { // update select property
return _.map(b, function(i) { return i + 1; });
}
);
// o2 = { a: { c: 1 }, b: [2, 3, 4] }
// o1 is not modified
// o2 !== o1
// o2.b !== o1.b
// o2.a === o1.a