如何使用JavaScript的forEach方法处理数值数组计算相对初始值的涨跌幅百分比
问题原因
你原来的代码存在两处错误:
forEach遍历的是外层的close_px数组,拿到的element是每一个子价格数组,直接对数组整体做除法运算不会生效,JS会先把数组转成字符串再做运算,无法得到预期结果forEach本身没有返回值,也不会自动修改原数组的元素,你需要主动对每个子数组的内部元素做遍历计算,或者用map生成新的结果数组
正确实现
方案1:生成新的结果数组(不修改原数据,推荐)
用双层map遍历,外层遍历每个价格子数组,内层遍历子数组的每个价格元素,计算相对首元素的涨跌幅:
var close_px = []; close_px.push([9,9.5,10.2,10.3,10.6]); close_px.push([5,5.7,5.3,5.1,5,6]); // 计算涨跌幅 const changeRates = close_px.map(priceArr => { const basePrice = priceArr[0] return priceArr.map(price => price / basePrice - 1) }) console.log(changeRates)
如果需要百分比格式可以直接调整返回值,比如(price / basePrice -1) * 100 + '%'
方案2:直接修改原数组
如果需要覆盖原数组的值,可以用嵌套的forEach实现:
close_px.forEach(priceArr => { const basePrice = priceArr[0] priceArr.forEach((price, index) => { priceArr[index] = price / basePrice - 1 }) }) console.log(close_px)
输出示例
以第一个子数组为例,计算后输出结果为:[0, 0.05555555555555558, 0.1333333333333333, 0.14444444444444443, 0.1777777777777778]
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

