如何使用 JavaScript 映射添加变量的先前值

Nik*_*laj 3 html javascript css variables

我正在使用 JavaScript 映射从此类数据中获取所有值:

var data = {
    size: 600,
    sectors: [
        {
            percentage: 0.7,
            label: 'Thing 1'
        },
        {
            percentage: 0.3,
            label: "Thing Two"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

并且data.sectors.map( function(item,key)我正在使用百分比计算角度。知道我的问题是如何保存地图中的值以将此值添加到地图的下一个计算中?

我得到的是每次地图运行时我都会收到角度来计算函数,例如:

1: 25
2: 30
3: 25
4: 20
Run Code Online (Sandbox Code Playgroud)

这是我用来计算一个函数的角度,但在另一个函数中,我还必须使用它的先前值来计算角度:

1: 25
2: 55
3: 80
4: 100
Run Code Online (Sandbox Code Playgroud)

如何在 JS 中使用 map 来获取它?

Nei*_*eil 8

我知道这个问题比较老,但我刚刚遇到了一个类似的问题,不知何故找不到关于此的其他问答。

通过在Array.prototype.map()的回调中使用所有三个参数:currentValue, index, array您可以使用以前的值更新当前值,如下所示:

let newValues = [25,30,25,20].map((curr, i, array) => {
  return array[i] += array[i-1] ? array[i-1] : 0
})

console.log(newValues)
// expected: [25,55,80,100]
Run Code Online (Sandbox Code Playgroud)

请注意,与Array.prototype.reduce()类似,您需要在array[i-1]不存在时(在 的第一次迭代中map)设置初始值。否则,您将使用先前的值。


Amo*_*mar 1

Javascript 映射函数用于将数组的每个值映射到新值的地方,它返回一个新数组。如果你想要做的是从数组中获取单个值,例如将数组的所有值相加,你应该使用Javascript的reduce函数。

data.sectors.reduce((accumulator, each)=>{
   return (accumulator + each )
})
Run Code Online (Sandbox Code Playgroud)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

使用它可以更深入地了解reduce 函数。