【发布时间】:2021-09-28 01:52:00
【问题描述】:
我正在从如下所示的 JSON 文件接收数据:
{"USD": {"7d": 32053.72, "30d": 33194.68, "24h": 31370.42}, "AUD": {"7d": 43134.11, "30d": 44219.00, "24h": 42701.11}, "RUB": {"7d": 2451451.45, "30d": 2465896.74, "24h": 2398589.80}, "JPY": {"7d": 3537735.55, "30d": 3664620.47, "24h": 3472632.46}, "BRL": {"7d": 167555.18, "30d": 169473.27, "24h": 163054.93}, "ILS": {"7d": 108658.72, "30d": 111663.67, "24h": 106988.58}, "GBP": {"7d": 23257.66, "30d": 23838.55, "24h": 22923.17}, "PLN": {"7d": 124869.61, "30d": 127872.57, "24h": 122668.16}, "CAD": {"7d": 40425.62, "30d": 41444.76, "24h": 39827.13}, "EUR": {"7d": 27187.74, "30d": 27955.81, "24h": 26659.79}}
我稍后在 Vuetify 表中显示这些数据,我想要实现的是用我的百分比计算逻辑填充 thirtyDaysDiff 列。我的逻辑有效并且该字段被填充,但我必须为数组中的每个对象手动编写它,这是我想避免的。
如何为数组中的每个对象应用以下逻辑,而不是为每个对象手动执行?
逻辑:
calculateThirtyDayDifference() {
let calculatedPercent = 100 * Math.abs( ( this.bitcoinInfo[0]['7d'] - this.bitcoinInfo[0]['30d'] ) / ( (this.bitcoinInfo[0]['7d']+this.bitcoinInfo[0]['30d'])/2 ) )
let roundedCalculatedPercent = Math.max( Math.round(calculatedPercent * 10) / 10, 2.8 ).toFixed(2)
this.bitcoinInfo[0].thirtyDaysDiff = roundedCalculatedPercent
let secondCalculatedPercent = 100 * Math.abs( ( this.bitcoinInfo[1]['7d'] - this.bitcoinInfo[1]['30d'] ) / ( (this.bitcoinInfo[1]['7d']+this.bitcoinInfo[0]['30d'])/2 ) )
let secondRoundedCalculatedPercent = Math.max( Math.round(secondCalculatedPercent * 10) / 10, 2.8 ).toFixed(2)
this.bitcoinInfo[1].thirtyDaysDiff = secondRoundedCalculatedPercent
}
我尝试使用forEach 进行操作,但没有成功。这是我的整个组件:
<template>
<div>
<v-data-table
:headers="headers"
:items="bitcoinInfo"
:hide-default-footer="true"
:class="{active: group && item.id == group.id}"
>
</v-data-table>
</div>
</template>
<script>
import axios from 'axios';
export default {
data () {
return {
bitcoinInfo: [],
headers: [
{
text: 'Currency',
align: 'start',
value: 'currency',
},
{ text: '30 Days Ago', value: '30d' },
{ text: '30 Day Diff %', value: 'thirtyDaysDiff'},
{ text: '7 Days Ago', value: '7d' },
{ text: '7 Day Diff %', value: 'sevenDaysDifference' },
{ text: '24 Hours Ago', value: '24h' },
],
}
},
methods: {
getBitcoinData() {
axios
.get('data.json')
.then((response => {
var convertedCollection = Object.keys(response.data).map(key => {
return {currency: key, thirtyDaysDiff: 0, sevenDaysDifference: 0, ...response.data[key]}
})
this.bitcoinInfo = convertedCollection
}))
.catch(err => console.log(err))
},
calculateThirtyDayDifference() {
let calculatedPercent = 100 * Math.abs( ( this.bitcoinInfo[0]['7d'] - this.bitcoinInfo[0]['30d'] ) / ( (this.bitcoinInfo[0]['7d']+this.bitcoinInfo[0]['30d'])/2 ) )
let roundedCalculatedPercent = Math.max( Math.round(calculatedPercent * 10) / 10, 2.8 ).toFixed(2)
this.bitcoinInfo[0].thirtyDaysDiff = roundedCalculatedPercent
let secondCalculatedPercent = 100 * Math.abs( ( this.bitcoinInfo[1]['7d'] - this.bitcoinInfo[1]['30d'] ) / ( (this.bitcoinInfo[1]['7d']+this.bitcoinInfo[0]['30d'])/2 ) )
let secondRoundedCalculatedPercent = Math.max( Math.round(secondCalculatedPercent * 10) / 10, 2.8 ).toFixed(2)
this.bitcoinInfo[1].thirtyDaysDiff = secondRoundedCalculatedPercent
}
},
mounted() {
this.getBitcoinData()
},
updated() {
this.calculateThirtyDayDifference()
}
}
</script>
【问题讨论】:
标签: javascript arrays vue.js vuetify.js