循环槽阵列并求和长度

时间:2019-03-11 21:09:51

标签: javascript

已编辑:

有人可以进一步解决以下问题吗?我有一个班级和一个班级里面的数组。现在,我想使用for循环求和前一次数组长度的总和,但是要进行每次迭代。如果i == 1,我想将arr [0] .x.length的长度求和,如果i == 2,我要对arr [0] .x.length + arr [1] .x.length的长度求和。检查每次迭代将需要大量代码。

有没有简单的方法可以做到这一点?相反,总是使用换行

if (i == 1) n = n + arr[i-1].x.length;
if (i == 2) n = n + arr[i-1].x.length+arr[i-2].x.length;
if (i == 3) n = n + arr[i-1].x.length+arr[i-2].x.length+arr[i-3].x.length;

function Class() {
 var x = [];
}

for (var i = 0; i < 9; i++) {
  arr[i] = new Class();
}

I add 4 items to each object.
arr[0].x.push(...)
arr[0].x.push(...)
...
arr[1].x.push(...)
arr[1].x.push(...)
...

var n = 0;

for (var i = 0; i < arr.length; i++) {
  if (i == 1) {
    n = n + arr[i-1].x.length;
  } else if (i == 2) {
    n = n + arr[i-1].x.length+arr[i-2].x.length;
  } else if (i == 3) {
    n = n + arr[i-1].x.length+arr[i-2].x.length+arr[i-3].x.length;
  }
  // ect.
}

3 个答案:

答案 0 :(得分:3)

您可以使用reduce来获得子数组所有长度的总和。例如:

const arrs = [[1,2,3], [4,5,6]];

let sum = arrs.reduce((acc, arr) => acc += arr.length, 0);
console.log(sum);
// 6

答案 1 :(得分:1)

只需嵌套两次循环:遍历索引一次,然后在内部循环中从0开始向上索引:

for (var i = 0; i < arr1.length; i++) {
  for(var j = 0; j <= i; j++) {
     n = n + arr1[j].length;
  }
}

答案 2 :(得分:1)

编辑:benvc的答案就是您要使用reduce的情况。

#!/usr/bin/env python                                                           

import socket

sock = socket.socket()

sock.bind(('',3912))
sock.listen(100)

num_cons = 10
cons = []
for i in range(num_cons):
    con, addr = sock.accept()
    cons.append(con)

while True:
    for con in cons:
        msg = "a"* 1000
        num_sent = con.send(msg.encode())
        print("sent: {} bytes of msg:{}".format(str(num_sent), msg))