Вы можете иметь либо одно, либо другое; иначе это плохо определено. (Если вы не хотите принять очень сомнительное решение сделать специальный случай типа «если мой первый аргумент - массив, а каждый элемент - массив, верните что-то другое». Тогда вы будете переделывать PHP в кратчайшие сроки. =])
Вместо этого используйте метод somefunction .apply ; это то, для чего это было сделано. Например:
product.apply(this, arr4)
Эквивалентно:
product(arr4[0], arr4[1], ...)
Если вы делаете это много, вы можете определить product2(arrays) {return product.apply(this,arrays)}
.
Однако, если вы не хотите сделать и product([..], [..], ..)
, и product([[..],[..],..])
, это выглядит не элегантно.
Если вы хотите, чтобы эта функция по умолчанию работала подобно product([[..],[..],..])
, то правильный способ решить эту проблему - изменить функцию в соответствии с вашими потребностями. В настоящее время используется переменная по умолчанию «variadic» (несколько аргументов) arguments
, специально предназначенная для javascript, которая представляет собой массив, представляющий все аргументы, которые вы передали в функцию. Это не то, что вам нужно, если вам нужны обычные функции с фиксированным числом аргументов. Сначала добавьте соответствующий параметр:
function product(arrays) {
...
}
и вместо использования переменной arguments
по умолчанию замените ее на arrays
.