invoke()中使用undercorejs的不同方法是什么

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

本文关键字:方法 是什么 undercorejs invoke      更新时间:2023-09-26

我的代码:

  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
  • 如果有人知道操作列表或任何其他参考资料,请帮助我

要回答您的问题,我们首先来看看_.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原型的方法。这意味着可以在_.invoke:中使用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等。