如何将参数转换为平面数组

时间:2013-12-01 20:39:26

标签: javascript arguments

考虑这段代码:

 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]作为参数。

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);

JSFIDDLE

答案 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);

JS Fiddle demo

参考文献: