考虑这段代码:
function test() {
console.log(Array.prototype.slice.call(arguments));
}
test([1,2]); // returns [ Array[2] ];
我想获得一个平面数组[1,2]而不是[数组[2]]。 另外我不想调用test.apply(null,[1,2]),我需要传入一个正确的数组[1,2]作为参数。
答案 0 :(得分:0)
只切片第一个参数?
function test() {
console.log(Array.prototype.slice.call(arguments[0]));
}
test([1,2]);
或者循环遍历数组的参数:
function test() {
var args = [],
i = 0;
for ( ; i < arguments.length; ++i )
{
if ( Array.isArray( arguments[i] ) )
Array.prototype.push.apply( args, arguments[i] );
else
args.push( arguments[i] );
}
console.log( args );
}
test([1,2], [3,4,5], 6, [7], 8, 9);
答案 1 :(得分:0)
一种天真的方法(不考虑对象或嵌套数组):
function test() {
var args = [];
for (var i = 0, len = arguments.length; i < len; i++) {
if (arguments[i] instanceof Array) {
args = args.concat(arguments[i]);
} else if (typeof arguments[i] === 'string') {
args.push(arguments[i]);
}
}
return (args);
}
var allPassedArguments = test([1, 2], 'something', ['more', 'array', 'goodness']);
console.log(allPassedArguments);
参考文献: