[英]React update properties of nested object in array
假设我有以下数据:
stockData: [
{
"ticker": "AAPL",
"name": "Apple Inc",
"priceChanges": {
"daily": 0.0155,
"weekly": -0.0355,
"monthly": -0.2000
},
"financialData": {
"roa": 0.0574,
"roe": 0.2007,
"market_cap": "1.2T"
}
},
{
"ticker": "MSFT",
"name": "Microsoft Corporation",
"priceChanges": {
"daily": 0.0435,
"weekly": 0.0125,
"monthly": -0.2205
},
"financialData": {
"roa": 0.0873,
"roe": 0.1507,
"market_cap": "1.3T"
}
}
]
我已拨打 API 电话以将此数据导入我的 React 应用程序:
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
stockData: [],
}
}
componentDidMount() {
axios.get("http://localhost:8080/stocks")
.then(response => {
this.setState({
stockData: response.data
})
})
}
}
现在我的问题是我必须将所有这些 NUMERIC 属性值(stockData.priceChanges.daily、stockData.financialData.roa 等)转换为百分比,这意味着我必须将它们乘以 100,以便以后可以在表并在不同的函数中使用修改后的数组。 由于我必须修改的数组中的属性是嵌套的,因此我不确定如何解决此问题。
如果值没有嵌套,我会尝试这样处理它:
const convertedArray = this.state.stockData.map((item) => ({
...item,
daily: item.daily * 100,
monthly: monthly.daily * 100 // and so on with other properties
}))
您可以更新将在 Table 或某些组件中显示的值,但是如果您想更新数据以具有百分比而不是值,您可以简单地使用 forEach 或 map() 来更新数据
假设您从 api 获得了这些数据
const data = [ { "ticker": "AAPL", "name": "Apple Inc", "priceChanges": { "daily": 0.0155, "weekly": -0.0355, "monthly": -0.2000 }, "financialData": { "roa": 0.0574, "roe": 0.2007 } }, { "ticker": "MSFT", "name": "Microsoft Corporation", "priceChanges": { "daily": 0.0435, "weekly": 0.0125, "monthly": -0.2205 }, "financialData": { "roa": 0.0873, "roe": 0.1507 } } ]; const stock = data.map(d => { const priceChanges = { "daily": d.priceChanges.daily * 100, "weekly": d.priceChanges.weekly * 100, "monthly": d.priceChanges.monthly * 100 }; const financialData = { "roa": d.financialData.roa * 100, "roe": d.financialData.roa * 100 }; return {...d, priceChanges, financialData } }); console.log(stock);
如果每个嵌套的 object 都将转换为百分比,则使用此:
a.map(obj => {
Object.keys(obj).forEach(key => {
if(typeof obj[key] === "object") {
Object.keys(obj[key]).forEach(_key => {
obj[key][_key] = obj[key][_key] * 100
});
}
});
return obj
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.