Underscore有数组和函数的映射,但是它们适用于单个项目,而不是整个项目。
所以假设我想在链接时更改对象的“形状”:
var result = _.chain(foo)
.pluck(...)
.stuff()
.moreStuff()
.TRANSFORMHERE() // <------ what step/steps here to wrap the object?
.evenMoreStuff()
.value();
类似于:
{ a: 1, b: 2, c: 3, d: 4}
到
{ foo: {a: 1, b: 2, c: 3, d: 4}, bar: "hello" }
没有链接就很容易。但是,在链接时,我可以采取什么步骤来获取对象并将其作为新对象中的属性包装?
答案 0 :(得分:1)
您想使用tap
。
var result = _.chain(foo)
.pluck(...)
.stuff()
.moreStuff()
.tap(function(obj) {
obj.foo = { a : obj.a, b : obj.b, c : obj.c, d : obj.d };
obj.bar = "hello";
// Delete old keys
delete obj.a;
delete obj.b;
delete obj.c;
delete obj.d;
})
.evenMoreStuff()
.value();
不是说你做不到这样的事情:
tap(function(obj) {
return {
a : obj.a,
...
bar : "hello"
};
});
下划线忽略tap
的结果。所以你必须直接修改对象。
答案 1 :(得分:0)
除非某人有更好/更容易/内置的方式,否则我猜我们可以add a function to underscore:
_.mixin({
wrapObject: function(obj, name) {
var outer = {};
outer[name] = obj;
return outer;
}
});