数组帮助。如何将两个数组相乘,其中一个数组去掉第一个元素,另一个数组去掉最后一个元素。

3

用户输入的数组:[1,2,3,4]

我想要的结果:

[1,2,3]*[2,3,4]
(1*2) + (2*3) + (3*4) = 20

目前我的进展:

var array = [];
var number= document.getElementById("number").value; //this is where user inputs the number for my array

var sum = 0;
for (var i = 0; i< number.length; i++){
    array.push(parseInt(number[i]));
    var first= number[i-1];
    var second = number[i+1];
    sum += (first*second);
}
console.log(sum);
3个回答

1

这个不需要使用数组。

在下面的模式中:(1*2) + (2*3) + (3*4),你可以看到如何使用for循环而不需要数组来实现。

以下方法可行:

var number= parseInt(document.getElementById("number").value); //this is where user inputs the number for my array
var sum=0;
for (var i = 1; i< number; i++){
    sum += i*(i+1);
}
console.log(sum);

如果我这样做会得到NaN。我还能使用parseInt()吗? - JinkyBu2
出于某种原因,我得到了0。 - JinkyBu2
你的求和或数字得到了0吗? - Maxqueue
在我的控制台上,总和为0。 - JinkyBu2
这意味着数字为0。尝试手动将数字设置为其他值。那么你的问题就是数字没有按照你的预期被填充。 - Maxqueue

1

这是我使用数组的reduce方法得出的解决方案。

[1, 2, 3, 4].reduce((a, c, i, s) => (s[i + 1] ? c * s[i + 1] + a : a), 0);

你的解决方案假设数组已经被填充。这个问题不需要数组。请参考我上面的答案。 - Maxqueue
@Maxqueue,我看到你的回答了。他说“输入是数组”。你正在计算数组索引而不是数组项。尝试对该数组进行洗牌并查看是否获得正确的输出。顺便说一句,我不明白为什么要将数组转换为数字。祝愉快! - user13198697

0
你可以使用切片获取数组的子集,然后使用 reduce 创建总和,就像这样:

const arr = [1,2,3,4]

const first = arr.slice(0, -1)
const last = arr.slice(1, arr.length)

const result = first.reduce((acc, num, idx) => acc + num * last[idx], 0)

console.log(result)


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