0
function product() {
    return Array.prototype.reduce.call(arguments, function(as, bs) {
        return [a.concat(b) for each (a in as) for each (b in bs)]
    }, [[]]);
}


arr4=[['4','4A','4B'],['16D','15D'],['5d','5e']];
alert(product(['4','4A','4B'],['16D','15D'],['5d','5e']);

上述工作,但以下不工作:

arr4=[['4','4A','4B'],['16D','15D'],['5d','5e']];
alert(product(arr4);

感谢您的建议

4

1 回答 1

3

你可以有一个或另一个;否则定义不明确。(除非您想做出非常可疑的决定来执行特殊情况,例如“如果我的第一个参数是一个数组并且每个元素都是一个数组,则返回不同的东西”。那么您将立即重新制作 PHP。=])


改用somefunction .apply方法;这就是它的目的。例如:

product.apply(this, arr4)

相当于:

product(arr4[0], arr4[1], ...)

如果你经常这样做,你可以定义product2(arrays) {return product.apply(this,arrays)}.


但是,除非您想同时执行and product([..], [..], ..),否则product([[..],[..],..])这似乎不优雅。

如果您希望此函数在默认情况下表现得像product([[..],[..],..]),那么解决此问题的正确方法是修改该函数以满足您的需要。它目前正在使用argumentsJavaScript 特有的默认“可变参数”(多参数)变量,它代表一个数组,表示您传递给函数的所有参数。如果您想要普通样式的固定参数数量函数,这不是您想要的。首先添加适当的参数:

function product(arrays) {
    ...
}

而不是使用默认arguments变量,而是将其替换为arrays.

于 2012-02-21T21:56:09.340 回答