为什么这个array.filter总是什么都不返回?

时间:2012-09-02 14:28:54

标签: javascript filter

为什么这个过滤器永远不会返回任何对象?

NewHashMap.prototype.remove = function (keys, obj) {
    // snip
    var myEntries = this.entries;
    var filteredEntries = myEntries.filter(
        function(entry){
            //me.isContainedBy(entry, keys) &&
            //entry.obj === obj
            true;
        });
    console.debug("entries ",  myEntries.length);
    console.debug("filtered ", filteredEntries.length);
    // snip
}

更进一步,我在不同的背景下使用它,它的工作原理 您还看到我注释掉了我的实际过滤器要求,并将其替换为普通的True。同样的事情。

我猜这是一个上下文问题,但我看不到。

2 个答案:

答案 0 :(得分:2)

除非true来自匿名函数,否则return无效。

var filteredEntries = myEntries.filter(
    function(entry){
        //me.isContainedBy(entry, keys) &&
        //entry.obj === obj
        return true;
});

或使用您的实际过滤器代码:

var filteredEntries = myEntries.filter(
    function(entry){
        return me.isContainedBy(entry, keys) && entry.obj === obj
});

答案 1 :(得分:2)

您需要return来自回调函数的布尔值:

var filteredEntries = myEntries.filter(
        function(entry){
            //me.isContainedBy(entry, keys) &&
            //entry.obj === obj
            return true;
        });