JS如何将数组元素作为独立参数传入函数?含部分传参需求
轻松解决数组元素作为独立参数传入函数的问题
嘿,这个场景太常见了!不用一个个手动写索引传参,JS里有两种非常便捷的方式帮你搞定,而且完全不用改动foo函数~
方法一:ES6+ 推荐使用「展开运算符(Spread Operator)」
这是目前最简洁直观的写法,ES6及以上版本都支持:
1. 传递整个数组的元素
var vals = [1, 3, 4]; foo(...vals); // 完全等价于 foo(vals[0], vals[1], vals[2])
...运算符会把数组的每一个元素拆解成独立的参数,直接传给foo函数,完美替代手动写索引的繁琐写法。
2. 传递数组的部分元素(比如12元素数组的前10个)
用slice()先截取你需要的数组片段,再用展开运算符传递:
var longVals = [1,2,3,4,5,6,7,8,9,10,11,12]; // slice(起始索引, 结束索引) 是左闭右开,所以slice(0,10)取前10个元素 foo(...longVals.slice(0, 10)); // 等价于 foo(1,2,3,...,10)
如果需要取中间某一段也可以,比如slice(2,7)就是取索引2到6的元素,灵活得很!
方法二:兼容旧环境使用「apply 方法」
如果你的项目需要支持ES6之前的老浏览器,就用apply方法:
1. 传递整个数组的元素
var vals = [1, 3, 4]; foo.apply(null, vals); // 等价于 foo(vals[0], vals[1], vals[2])
apply方法的第一个参数是指定foo执行时的this指向,因为foo是普通函数,不需要特定的this,所以传null或undefined都可以;第二个参数就是要拆解成参数的数组。
2. 传递数组的部分元素
同样结合slice()截取片段:
var longVals = [1,2,3,4,5,6,7,8,9,10,11,12]; foo.apply(null, longVals.slice(0, 10));
这两种方法的核心都是把数组元素「展开」成函数需要的独立参数,完全符合你的需求,不管数组有多少元素,都能轻松处理,再也不用写一堆vals[n]啦!
内容的提问来源于stack exchange,提问作者i'm a girl
相关产品推荐
相关产品推荐

