_.invoke(list, method, *args)
每个list属性值都执行method方法,根据method方法返回一个数组。
var result;
// 操作数组(对数组中的每个数组执行join方法把数组中的所有元素放入一个字符串)
result = _.invoke([[5, 1, 7], [3, 2, 1]], 'join');
console.log(result); //=> ["5,1,7", "3,2,1"]
// 操作对象(对象的每个属性值执行toFixed方法保留两位小数点)
result = _.invoke({x: 11.111, y: 22.2}, 'toFixed', 2);
console.log(result); //=> ["11.11", "22.20"]
// 操作字符串(将字符串分解为一个数组,对这个数组中的每个值执行toUpperCase方法)
result = _.invoke('abc', 'toUpperCase');
console.log(result); //=> ["A", "B", "C"]
//操作arguments
function abc() {
result = _.invoke(arguments, 'toFixed', 1);
console.log(result); //=> ["1.0", "2.0", "3.0"]
}
abc(1, 2, 3);
var result;
// method也可直接传递方法
result = _.invoke([[5, 1, 7], [3, 2, 1]], Array.prototype.join);
console.log(result); //=>["5,1,7", "3,2,1"]
// 自定义method方法(需要有返回值)
result = _.invoke([1, 2, 3], function (a) {
return a + this; // this是每个属性值
}, 3);
console.log(result); //=> [4, 5, 6]
// 截取数组中的每个字符串位置从2开始4结束
var result = _.invoke(['abcde', '123456'], 'slice', 2, 4);
console.log(result); //=> ["cd", "34"]
var result;
// method为空
result = _.invoke([1, 2, 3]);
console.log(result); //=> [undefined, undefined, undefined]
// method非方法
result = _.invoke([1, 2, 3], null);
console.log(result); //=> [undefined, undefined, undefined]
// method没有返回值
result = _.invoke([1, 2, 3], function (){ });
console.log(result); //=> [undefined, undefined, undefined]
var result = _.invoke([{ a: 1 }], 'a');
console.log(result); //=> Uncaught TypeError: func.apply is not a function