我试图在一个简单的对象上使用underscore.js:
var tab = {
1: "obj1",
4: "obj4",
8: "obj8"
};
我想要做的只是删除键值高于n
的元素,所以我做的是:
function trimFrom(obj, n){
return _(obj).filter(function(el, id){
return id <= n;
});
};
var tab2 = trimFrom(tab, 5)
现在,我在展示tab2
时所期待的是:
tab2: Object
1: "obj1",
4: "obj4"
但我得到的是:
tab2: Array[2]
0: "obj1"
1: "obj4"
如何将输出保留为对象?是否有任何方法可以将结果直接应用于作为参数传递的对象,而无需执行var tab = trimFrom(tab, 5)
之类的操作并避免复制值?
修改 对于那些想直接对像我这样的传递对象进行更改的人,只需执行:
function trimFrom(obj, n){
for(var key in obj)
if(key > n)
delete obj[key];
};
答案 0 :(得分:1)
您可以获取对象键,并使用.reduce()
将键/值减少到新对象。
DEMO: http://jsfiddle.net/ubxE5/2/
function trimFrom(obj, n){
return _.reduce(obj, function(res, val, key){
if (key <= 5)
res[key] = val;
return res
}, {});
}; // ^--- the new object
因此,如果您愿意,也可以传入该对象。
function trimFrom(obj, n, result){
return _.reduce(obj, function(res, val, key){
if (key <= 5)
res[key] = val;
return res
}, result);
}; // ^--- the new object
var new_obj = {};
trimFrom(tab, 5, new_obj)