0

我有一个这样的javascript模型:

var scope = {
  entries : [ 
      { label : 'one', value : 'first entry'}, 
      { label : 'two', value : 'second entry'}, 
      { label : 'a', value : 'x'}
  ],
  order : 'label'; // may also contain 'value'
}

现在我想根据 order 的值对条目进行排序并缓存它。

我知道使用闭包的方式:

_.memoize( 
    function() {
        return _.sortBy( scope.entries, scope.order);
    }, 
    _.partial( _.result, scope, 'order')
)

是否可以将调用 _.sortBy 的闭包替换为类似于第二个参数(由 _.partial 生成的函数)之类的东西?

明确一点:我想要的是一种声明“排序顺序”而不将其包装在函数中的方法。所以它看起来像:

_.memoize( 
        // line below doesnt work, just to clarify what i want :-)
    _.sortBy( scope.entries, _.result( scope, 'order')), 

    _.partial( _.result, scope, 'order')
)
4

1 回答 1

0

好吧,_.memoize需要一个函数来记忆,所以不,你不能用对你试图记忆的函数的调用来替换第一个参数。您的代码似乎是半最优的。另一方面,_.result仅用于获取属性值似乎很奇怪,我想这样您就可以使用_.partial并避免编写function;确定这会起作用,但可能有点令人困惑,那么为什么不在那里也使用一个函数呢?参数化它scope,你会有

_.memoize( 
    function(scope) {return _.sortBy(scope.entries, scope.order);},
    function(scope) {return scope.order;}
);

对我来说似乎很干净。

于 2013-08-20T18:39:41.720 回答