为什么我的 JavaScript 函数接受三个数组,而不是包含三个数组的数组


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

感谢您的建议

你可以有一个或另一个;否则它的定义很差。(除非你想做出非常有问题的决定来做特殊大小写,比如"如果我的第一个参数是一个数组,每个元素都是一个数组,则返回不同的东西"。然后你很快就会重新制作 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

相关内容

  • 没有找到相关文章

最新更新