RT,定义了一个函数,参数为接收不定数量的数组。
如何做?
背景:
在某个算法中用到了二分思想,调用的时候传递一串参数,每个参数均为数组,函数处理中将参数二分,再分别调用。
比如:
func([1,2,3],[2,3,4],[3,4,5])
func处理中会调用:
func([1,2,3],[2,3,4])
以及func([3,4,5])
现在就卡在了上面这步,不知道如何把原始传入的数组参数分割成部分再作为参数传入。试了几种方法都不行,请会的同学不吝赐教,谢谢!
不要说用Arrary.prototype.slice(arguments)
,这样分割后的参数是一个数组参数,而不是多个数组参数
‘use strict’;
function fun() { let args = Array.from(arguments) console.log(args); }
fun([1,2,3], [2,3,4], [3,4,5]);
输出结果 192:Desktop wy$ node wy.js [ [ 1, 2, 3 ], [ 2, 3, 4 ], [ 3, 4, 5 ] ]
这样呢? function func(…args) {} args 分割之后再 func(…args) 调用
最近正在翻译预发布的 lodash 的中文文档,这个函数会帮到你 http://lodash.think2011.net/chunk
感谢大家回答,今天又研究了一下,发现了一个更加精妙和简洁的处理方式,还是对js的高级用法不太熟悉。 贴一下以飨后来人,方法是使用array的reduce方法。 首先,既然处理函数只接受两个数组参数,那么先实现这个接受两个参数的函数,
function func(arr1,arr2){
......
}
然后在调用的时候将arguments作为数组传入,使用reduce方法:
var args = Array.prototype.slice.call(arguments);
return args.reduce(function(arr1,arr2){
return func(arr1,arr2);
});
[x1, x2, x3, x4].reduce(f) 相当于 f(f(f(x1, x2), x3), x4),受到了廖雪峰的js教程的启发,在此感谢一下 廖雪峰map/reduce