cqwcns 发表于 2022-9-30 09:12

JS数组按下标求和的问题

各位好,讨论一下JS数组求和的问题
如以下demo,我们有一个中规中矩的数组,需要按下标位置进行求和。
各位大佬有没有更好的写法?谢谢交流。

<!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 = [
            ,
            ,
            ,
            ,
            
      ];
      // 需求是将数组内的全部数组,按下标位置求和

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

      // 遍历并相加
      arr.forEach(row => {
            row.forEach((e, i) => {
                res += 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;
});
console.log(result);
//
```

Lambor_G 发表于 2022-9-30 11:12

arr = [
    ,
    ,
    ,
    ,
   
];
var newArr = [].concat.apply([], arr);
var res = []
var len = arr.length
for (var i = 0; i < newArr.length; i++) {
    if (res) {
      res += newArr
    } else {
      res = 0
      res += newArr
    }
   
}
console.log(res)

cqwcns 发表于 2022-9-30 11:35

Takitooru 发表于 2022-9-30 10:29
```
var result = arr.map(function(index, item) {
    return res;


我按大佬的方法,输出是


<!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 = [
            ,
            ,
            ,
            ,
            
      ];
      // 需求是将数组内的全部数组,按下标位置求和

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

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

</html>

Takitooru 发表于 2022-9-30 11:55

cqwcns 发表于 2022-9-30 11:35
我按大佬的方法,输出是



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

```
      arr = [
            ,
            ,
            ,
            ,
            
      ];
      // 需求是将数组内的全部数组,按下标位置求和

                var result = arr.map(function(index, item) {
                        return arr.reduce((p,e)=>p+e,0);
                });
                console.log(result);//
```

判判~ 发表于 2022-9-30 13:27

arr = [
,
,
,
,

]

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

abort 发表于 2022-9-30 19:50

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

const array = [, , ];

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

console.log(result);
页: [1] 2
查看完整版本: JS数组按下标求和的问题