繁体   English   中英

React更新数组中嵌套object的属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM