js 数组中挨个数字相加如何做?

let data = {}
let arr = [
    { width: 155 }, { width: 180 }, { width: 180 }, { width: 240 },
    { width: 130 }, { width: 280 }, { width: 100 }, { width: 50 }
]
for (let j = 0; j < arr.length; j++) {
    if (j >= 1) {
      console.log(j - 1, j)
      data[j] = arr[j] = [j - 1].with + arr[j] = [j].with
    }
  }
如何做到
data {
    0: arr[0] + arr[1],
    1: arr[0] + arr[1] + arr[2],
    2: arr[0] + arr[1] + arr[2] + arr[3] 
    ......
}
阅读 6k
3 个回答

2018年9月10日08:27:41
上周五下班就美滋滋的跑路了,今天回来看到这样一组数据

data {
    0: arr[0] + arr[1],
    1: arr[0] + arr[1] + arr[2],
    2: arr[0] + arr[1] + arr[2] + arr[3]
}

等同于

data {
    0: arr[0] + arr[1],
    1: data[0] + arr[2],
    2: data[1] + arr[3]
}

如果数据机构是数组[1,2,3,4,5]

arr = [1,2,3,4,5],sum = 0;
arr.map(v=>sum+=v)

clipboard.png
你会说,不对,第一个我不要,那么就加上.slice(1)咯。

clipboard.png

刚看了眼,刚刚好,你的数据也是数组下面这不就对了吗?

clipboard.png


原答案
你这个描述看不太懂呀,步长为2?这样吗

1 2 3 4 i
2 4 6 8 i*2
1 3 5 7 i*2-1 
let arr = [
    { width: 155 }, { width: 180 }, { width: 180 }, { width: 240 },
    { width: 130 }, { width: 280 }, { width: 100 }, { width: 50 }
]

let result = arr.reduce((pre, cur, index) => {
    let sum = Object.keys(pre).length > 0 ? pre[index - 1] + cur.width : 0 + cur.width;
    pre[index] = sum;
    return pre;
}, {})

console.log('result', result)
let data = arr.reduce((sum, cur, index) => {
  sum[index] = index === 0 ? cur.width : sum[index - 1] + cur.width
  return sum
}, {})
推荐问题