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

发布于 2025-01-08 00:03:08 字数 439 浏览 0 评论 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);

感谢您的建议

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

The above works but the following don't work:

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

Thanks for suggestions

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

怀里藏娇 2025-01-15 00:03:08

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


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

product.apply(this, arr4)

相当于:

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

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


但是,除非您想要两者 product([..], [..], ..)product([[..],[. .],..]),这看起来不太优雅。

如果您希望此函数默认的行为类似于 product([[..],[..],..]),那么解决此问题的正确方法是修改该函数以适合您的需求需要。它当前使用 javascript 特有的默认“variadic”(多个参数)arguments 变量,它代表一个数组,表示您传递给函数的所有参数。如果您想要普通风格的固定参数数量函数,这不是您想要的。首先添加适当的参数:

function product(arrays) {
    ...
}

不要使用默认的参数变量,而是将其替换为数组。

You can have either one or the other; otherwise it's poorly defined. (Unless you want to make the very questionable decision to do special-casing like "if my first argument is an array and each element is an array, return something different". Then you'll be remaking PHP in no time. =])


Use the somefunction.apply method instead; that's what it was made for. For example:

product.apply(this, arr4)

Is equivalent to:

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

If you do this a lot, you can define product2(arrays) {return product.apply(this,arrays)}.


However unless you want to do both product([..], [..], ..) and product([[..],[..],..]), this seems inelegant.

If you want this function to behave by default like product([[..],[..],..]), then the correct way to solve this is to modify the function to suit your needs. It is currently using the default "variadic" (multiple arguments) arguments variable special to javascript, which stands for an array representing all the arguments you passed into the function. This is not what you want, if you want normal-style fixed-number-of-arguments functions. First add in the appropriate parameter:

function product(arrays) {
    ...
}

and rather than using the default arguments variable, replace that with arrays.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文