Javascript 下划线过滤条件

Javascript 下划线过滤条件,javascript,underscore.js,Javascript,Underscore.js,是否可以使用下划线u.filter执行类似操作 self.getCols = function (columnId) { return cols = _.filter(self.model.cols(), function(c) { return ( (c.Id === self.model.Id()) && ((columnId === undefined) ? '' : c.columnId === columnId)

是否可以使用下划线u.filter执行类似操作

self.getCols = function (columnId) {
return cols = _.filter(self.model.cols(), function(c) {
    return (
            (c.Id === self.model.Id()) &&
            ((columnId === undefined) ? '' : c.columnId === columnId)           
    );
});         
})


现在我在columnId上使用的条件无效。抱歉,我的错误,我只是以正确的方式进行了编辑。

过滤器
并不真正关心您在回调中执行的操作,只要您返回truthy(包括当前项)或falsy(不包括当前项)

至于表达式,只有在以下情况下才是正确的:

  • c.Id==self.model.Id()
  • columnId
    存在
  • columndId
    等于
    c.columnId
所以我们这样写:

c.Id === self.model.Id() && columnId && c.columnId === columnId

在这种情况下,您的回报应该是(我认为):


这是假设“您指定的列”被解释为具有
Id
属性等于
self.model.Id()

的列,但我不确定如何处理
self.model.Id()
,但我认为这与您描述的内容(包括注释)是一致的:


您能否提供更多关于您试图通过列ID筛选实现什么的上下文。还有
self.model
?如果columnId未定义,我希望self.model.cols()中的所有列,否则只带来我指定的一列。寻求调试帮助的问题(“此代码为什么不工作?”)必须包括所需的行为,一个特定的问题或错误,以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。如果c.Id!==self.model.Id()?
return c.columnID || c.Id === self.model.ID();
self.getCols = function getCols (columnId) {
    var cols = self.model.cols();

    if (columnId === undefined) {
        return cols;
    }

    return _.filter(cols, function (c) {
        return c.columnId === columnId;
    });
}