鍍金池/ 問答/網(wǎng)絡(luò)安全  HTML/ 有一個包含對象的數(shù)組,我想輪詢這個數(shù)組給這四個變量賦予值,如何簡化這段代碼

有一個包含對象的數(shù)組,我想輪詢這個數(shù)組給這四個變量賦予值,如何簡化這段代碼

問題一

有一個包含對象的數(shù)組,我想輪詢這個數(shù)組給這四個變量賦予值,如何簡化這段代碼

"theDayUnfinished" : [
            {"name":"totalOrderAccount", "amount":55130},
            {"name":"dateOrderAccount", "amount":115},
            {"name":"totalCommodityAccount", "amount":12052},
            {"name":"dateCommodityAccount", "amount":789}
        ],
let totalOrderAccount = 0, // 今日總訂單
            dateOrderAccount = 0, // 4:30前訂單
            totalCommodityAccount = 0, // 今日總貨物
            dateCommodityAccount = 0; // 4:30前貨物

        if(unfinishData && unfinishData.length!= 0){
            unfinishData.map(function(item, index){
                if(item['name']== 'totalOrderAccount'){
                    totalOrderAccount = item['amount']
                } else if(item['name'] == 'dateOrderAccount'){
                    dateOrderAccount = item['amount']
                } else if(item['name'] == 'totalCommodityAccount'){
                    totalCommodityAccount = item['amount']
                } else if(item['name'] == 'dateCommodityAccount'){
                    dateCommodityAccount = item['amount']
                }
            })
        }

問題二

這個setState能不能簡化了

stateChange(returnData){
        const _self = this;
        const {theDayUnfinished, threeDaysUnfinished, overstock,
            theDaySend, tableHeader, urgentTableData, skipTableData, updateTableData} = returnData.data;
        this.setState({
            theDayUnfinished: theDayUnfinished, // 當(dāng)日未完成
            threeDaysUnfinished: threeDaysUnfinished, // 三日內(nèi)未完成
            overstock: overstock, // 積壓訂單
            theDaySend: theDaySend, // 當(dāng)日實(shí)際發(fā)貨工作量
            tableHeader: tableHeader, // 異常訂單表頭
            urgentTableData: urgentTableData, // 異常訂單 - 加急
            skipTableData: skipTableData, // 異常訂單 - 漏過帳
            updateTableData: updateTableData, // 異常訂單 - 修改
        })
    }
回答
編輯回答
柒喵

第一個:

將四個變量作為一個對象的key

let temps = {};

(unfinishData || []).forEach((item) => {
    temps[item.name] = item.amount;
})

第二個

stateChange(returnData) {
    this.setState({...returnData.data})
}
2018年5月19日 09:37
編輯回答
影魅

Q1:直接定義一個Account對象,遍歷數(shù)據(jù)時在function里Account[item.name] = item.amount
Q2思路也類似吧

2018年4月24日 06:22
編輯回答
念舊

第一個

const res = {};
unfinishData.forEach( item => {
    res[item.name] = item.amount
});
// res里有你所需要的四個屬性

第二個

stateChange(returnData){
        const _self = this;
        // 這個obj應(yīng)該是state初始的一個對象,其實(shí)不用寫,直接 const  {obj} = this.state;
        const Obj = {
            theDayUnfinished: null, // 當(dāng)日未完成
            threeDaysUnfinished: null, // 三日內(nèi)未完成
            overstock: null, // 積壓訂單
            theDaySend: null, // 當(dāng)日實(shí)際發(fā)貨工作量
            tableHeader: null, // 異常訂單表頭
            urgentTableData: null, // 異常訂單 - 加急
            skipTableData: null, // 異常訂單 - 漏過帳
            updateTableData: null, // 異常訂單 - 修改
        };
        Object.keys(Obj).forEach(v => {
            Obj[v] = returnData.data[v];
        })
        this.setState(Obj);
    }
2017年10月7日 12:10
編輯回答
伴謊

第一問:既然你要用的都是amout的屬性,那你就沒有必要在乎你當(dāng)前的對象是哪個,所以map中直接使用對象解構(gòu)即可:{'amout','name'},然后判斷name屬性相同的,加上amout即可。
第二問:使用增強(qiáng)對象字面量,當(dāng)你要賦值的屬性和變量名相同時,可以省略,比如原代碼:"js:js,
,",改進(jìn)代碼:"js,"。

2017年7月15日 12:49