使用underscore.js获取对象作为输出

时间:2013-05-22 11:17:03

标签: javascript object underscore.js trim

我试图在一个简单的对象上使用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];
};

1 个答案:

答案 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)