吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 810|回复: 10
收起左侧

[讨论] JS数组按下标求和的问题

[复制链接]
cqwcns 发表于 2022-9-30 09:12
各位好,讨论一下JS数组求和的问题
如以下demo,我们有一个中规中矩的数组,需要按下标位置进行求和。
各位大佬有没有更好的写法?谢谢交流。

[JavaScript] 纯文本查看 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        arr = [
            [23, 25, 68, 26, 27],
            [54, 98, 64, 27, 78],
            [78, 23, 34, 43, 23],
            [45, 34, 63, 26, 31],
            [19, 23, 18, 21, 29]
        ];
        // 需求是将数组内的全部数组,按下标位置求和

        // 新建一个指定长度的空数组
        let res = new Array(arr[0].length).fill(0);

        // 遍历并相加
        arr.forEach(row => {
            row.forEach((e, i) => {
                res[i] += e
            });
        });

        console.log(res)
    </script>
</body>

</html>

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

大Z. 发表于 2022-9-30 09:34
个人思路:若arr中每个数组长度一致都是n,则可以先将arr打平后为数组arrFlat,遍历arrFlat,计算arrFlat下标与n求余
clddup 发表于 2022-9-30 09:34
bhbhxy 发表于 2022-9-30 10:00
wangchuanlin 发表于 2022-9-30 09:34
需求还是没懂  比如举个例子 输入与输出

上面代码跑一遍就知道了,数组按列求和
Takitooru 发表于 2022-9-30 10:29
var result = arr.map(function(index, item) {
    return res[item];
});
console.log(result);
// [219, 203, 247, 143, 188]

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
cqwcns + 1 + 1 谢谢@Thanks!

查看全部评分

Lambor_G 发表于 2022-9-30 11:12
[JavaScript] 纯文本查看 复制代码
arr = [
    [23, 25, 68, 26, 27],
    [54, 98, 64, 27, 78],
    [78, 23, 34, 43, 23],
    [45, 34, 63, 26, 31],
    [19, 23, 18, 21, 29]
];
var newArr = [].concat.apply([], arr);
var res = []
var len = arr.length
for (var i = 0; i < newArr.length; i++) {
    if (res[i%len]) {
        res[i%len] += newArr[i]
    } else {
        res[i%len] = 0
        res[i%len] += newArr[i]
    }
    
}
console.log(res)

免费评分

参与人数 1热心值 +1 收起 理由
cqwcns + 1 谢谢@Thanks!

查看全部评分

 楼主| cqwcns 发表于 2022-9-30 11:35
Takitooru 发表于 2022-9-30 10:29
[md]```
var result = arr.map(function(index, item) {
    return res;

我按大佬的方法,输出是[0, 0, 0, 0, 0]


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        arr = [
            [23, 25, 68, 26, 27],
            [54, 98, 64, 27, 78],
            [78, 23, 34, 43, 23],
            [45, 34, 63, 26, 31],
            [19, 23, 18, 21, 29]
        ];
        // 需求是将数组内的全部数组,按下标位置求和

        // // 新建一个指定长度的空数组
        let res = new Array(arr[0].length).fill(0);

        // // 遍历并相加
        // arr.forEach(row => {
        //     row.forEach((e, i) => {
        //         res += e
        //     });
        // });
        var result = arr.map(function (index, item) {
            return res[item];
        });
        console.log(result);
    </script>
</body>

</html>
Takitooru 发表于 2022-9-30 11:55
cqwcns 发表于 2022-9-30 11:35
我按大佬的方法,输出是[0, 0, 0, 0, 0]

噢,没注意忽略了你写的forEach循环,导致引用了上面的变量,所以结果是0000
改一下就好了,代码如下

        arr = [
            [23, 25, 68, 26, 27],
            [54, 98, 64, 27, 78],
            [78, 23, 34, 43, 23],
            [45, 34, 63, 26, 31],
            [19, 23, 18, 21, 29]
        ];
        // 需求是将数组内的全部数组,按下标位置求和

                var result = arr.map(function(index, item) {
                        return arr.reduce((p,e)=>p+e[item],0);
                });
                console.log(result);//[219, 203, 247, 143, 188]

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
cqwcns + 1 + 1 谢谢@Thanks!

查看全部评分

判判~ 发表于 2022-9-30 13:27
[JavaScript] 纯文本查看 复制代码
arr = [
  [23, 25, 68, 26, 27],
  [54, 98, 64, 27, 78],
  [78, 23, 34, 43, 23],
  [45, 34, 63, 26, 31],
  [19, 23, 18, 21, 29]
]

console.log(arr.reduce((pre, cur) => pre.map((item, index) => item + cur[index])))

免费评分

参与人数 1吾爱币 +1 收起 理由
cqwcns + 1 谢谢@Thanks!

查看全部评分

abort 发表于 2022-9-30 19:50
本帖最后由 abort 于 2022-9-30 19:52 编辑

const array = [[0, 1], [2, 3], [4, 5]];

const result = array.flat().reduce((preValue, currentValue) => preValue+currentValue);

console.log(result);

免费评分

参与人数 1热心值 +1 收起 理由
cqwcns + 1 谢谢@Thanks!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 04:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表