2013-12-01 4 views
0

рассмотреть этот кусок кода:как преобразовать аргументы в плоский массив

function test() { 
    console.log(Array.prototype.slice.call(arguments)); 
} 

test([1,2]); // returns [ Array[2] ]; 

Я хочу, чтобы получить плоский массив [1,2], а не [Array [2]]. Кроме того, я не хочу вызывать test.apply (null, [1,2]), мне нужно передать правильный массив [1,2] в качестве аргументов.

+0

console.log (Array.prototype.slice.call (arguments) [0]); ? Но почему вы хотите вернуть то, что отправляете? – Popnoodles

+0

Почему вы вообще хотите использовать 'arguments'? Просто зарегистрируйте один параметр, который вы указали. Или используйте 'console.log.apply (console, arguments)' – Bergi

ответ

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

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.

Ссылки:

+0

Что произойдет с аргументами, которые не являются ни строкой, ни массивом? – Bergi

+0

Я не учитывал их, ни для многомерных массивов; хотя я подозреваю, что это не так уж сложно сделать. –

Смежные вопросы