如何给一个函数传递多个数组参数
发布于 9 年前 作者 zhangjh 6975 次浏览 最后一次编辑是 8 年前 来自 问答

RT,定义了一个函数,参数为接收不定数量的数组。 如何做? 背景: 在某个算法中用到了二分思想,调用的时候传递一串参数,每个参数均为数组,函数处理中将参数二分,再分别调用。 比如: func([1,2,3],[2,3,4],[3,4,5]) func处理中会调用: func([1,2,3],[2,3,4])以及func([3,4,5]) 现在就卡在了上面这步,不知道如何把原始传入的数组参数分割成部分再作为参数传入。试了几种方法都不行,请会的同学不吝赐教,谢谢!

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

回到顶部