使用underscorejs在_.invoke()中可用的不同方法是什么

时间:2015-02-04 11:11:03

标签: javascript underscore.js

我的代码:

  var arr = [[5,4,3],[3,7,88],[99,66,48]];
  //Sort
  var testInvoke = _.invoke(arr, 'sort');
  • _.invoke函数函数名称为sort
  • 这样所有按排序顺序和testInvoker数据排列的是

    [[3,4,5],[3,7,88],[48,66,99]]
    
  • 我的问题是_.invoke我可以执行其他操作,例如sort
  • sort以外,我才发现slice
  • 如果有人知道操作列表或其他任何参考资料,请帮助我。

1 个答案:

答案 0 :(得分:2)

要回答你的问题,我们首先要看看_.invoke内部的作用:

function (obj, method) {
     var args = slice.call(arguments, 2);
     var isFunc = _.isFunction(method);
     return _.map(obj, function(value) {
        return (isFunc ? method : value[method]).apply(value, args);
    });
}

从这里可以看出,method应该是列表项可能具有的任何方法。例如,如果obj是一个数组,则method可以是此数组项所具有的任何方法。取一串字符串:

["one", "two", "three"]

每个字符串都有一堆来自String原型的方法。这意味着可以在String.prototype.toUpperCase中使用说_.invoke方法:

_.invoke(["one", "two", "three"], "toUpperCase");

它会产生新的数组:

["ONE", "TWO", "THREE"]

所以问题的答案:method可以是被迭代对象的项支持的任何方法。这可以是原型方法,也可以是对象的自有属性:

function User(name) {
    this.name = name;
    this.getName = function() {return this.name};
}

var user1 = new User('Thomas');
var user2 = new User('Mann');

_.invoke([user1, user2], 'getName'); // => ["Thomas", "Mann"]

如果你的问题数组[[5,4,3],[3,7,88],[99,66,48]]除了sort,你可以使用任何其他Array.prototype方法,例如join,concat,reduce等。