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

what is the different methods available in _.invoke() using underscorejs

我的代码:

  var arr = [[5,4,3],[3,7,88],[99,66,48]];
  //Sort
  var testInvoke = _.invoke(arr, 'sort');

为了回答您的问题,让我们先看看 _.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"]

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

中使用 say String.prototype.toUpperCase 方法
_.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 等