我的代码:
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
答案 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等。