sortBy条件使用由下划线/ lodash生成的回调函数

时间:2013-08-20 12:59:09

标签: underscore.js lodash

我有一个像这样的javascript模型:

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

现在我想根据订单的价值对订单进行订购并缓存它。

我知道使用闭包的方式:

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

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

要明确:我想要的是一种声明'sortby order'东西而不将其包装在函数中的方法。所以它看起来像:

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

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

1 个答案:

答案 0 :(得分:0)

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

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

对我来说似乎很干净。