如何在javascript中将一个数字数组乘以另一个数字数组

3

我一直在尝试让一个数字数组能够乘以另一个数字数组,而不必使用 array.join("") * array2.join("")

我已经尝试了很多方法,比如:

var input = [3, 6, 4];
var scalar = 5;
var output = input.map(x => x * scalar); // [15, 30, 20]

虽然这只是一个数字,但数组可以乘以它。

我想要一个函数,可以实现:

var array = [ 1, 3, 2 ];
var array2 = [ 5, 3, 8, 2, 3, 5, 2 ];
someFunction(array, array2);
// [ 7, 1, 0, 4, 7, 0, 4, 6, 4 ]

请注意,我不希望它成为像这样的东西。

这里需要涉及IT技术相关内容,但是需要让内容更加通俗易懂。

array.join("") * array2.join("")

如果有人能够回答我的问题,我愿意将所有声望作为赏金奖励。


将它们转换为数字,相乘,然后再转换回数组无疑是最简单的解决方案。其他任何方法都会变得非常复杂 - 你不想走这条路有什么原因吗?在我看来,重新发明多位数乘法没有太大用处。 - CertainPerformance
是的,如果数组超过20个数字,它会给出科学计数法。 - Jeffplays2005
1
答案很大程度上取决于您为什么要这样做。这是一种智力挑战吗?那么请尝试实际实现每个数字的乘法。这是生产代码吗?如果是,请停止您正在进行的一切,并重新评估导致数字数组的选择。 - Nick Bailey
1个回答

3

如果科学计数法是问题,可以将数组转成BigInts。

var array = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5 ];
var array2 = [ 5, 3, 8, 2, 3, 5, 2, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5 ];
const someFunction = (arr1, arr2) => [...String(
  BigInt(arr1.join('')) * BigInt(arr2.join(''))
)].map(Number);
console.log(someFunction(array, array2));


我从未想过这些代码可以压缩到只有三行,我自己用了50多行仍然达不到,非常感谢。您让答案简单易懂。 - Jeffplays2005
嗨,我也想知道这个是否适用于数组?如果我将 * 替换为 /,它是否仍然有效,或者是否需要其他更改?谢谢。 - Jeffplays2005
1
它可以使用,但不是无限精度的。如果没有其他修改,您将失去小数点后面的所有内容。您可以通过首先将其中一个数字乘以10n ** 100n(或适当的值)来补偿,以增加正确计算的小数位数100位。 - CertainPerformance
嗨,我发现了一个小的数学错误。 例如,如果我在数组形式中计算900000000000000000000000 * 900000000000000000000000,它将返回:// 返回 [ 8, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 4, 5, 0, 2, 5, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 5, 9, 2, 1, 8, 6, 0, 4, 4, 4, 1, 6, 0, 0 ] - Jeffplays2005
1
对于大数,您必须将字符串传递给 BigInt,而不是数字。使用 BigInt('90000... 而不是 BigInt(90000...,然后我认为它会正常工作。 - CertainPerformance
忘记了给你打赏,抱歉。还有23个小时才能打赏。 - Jeffplays2005

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接