簡體   English   中英

排序對象數組說明

[英]sorting an array of objects explained

我有這個對象數組(摘要)->來自工作人員的狀態。

我按照我從這里獲得的示例運行

但是在運行它時,它什么也不做,並且逐步執行它表明ab參數從未初始化。

我真的不明白它是如何工作的。 請您解釋一下發生了什么,而無需將我分發給一些重復的讀者。 我想了解這一點。

100:{mds_id: 291100176, mds_surname: "Kaal", mds_role: "Doctor", mds_grade: "CONS", mds_firstname: "", …}
101:{mds_id: 291100004, mds_surname: "Key", mds_role: "Nurse", mds_grade: "Clinical Nurse Specialist", mds_firstname: "Blogs", …}
102:{mds_id: 291100349, mds_surname: "Kendy", mds_role: "Doctor", mds_grade: "CONS", mds_firstname: "Fred", …}
103:{mds_id: 291100356, mds_surname: "Kin", mds_role: "Nurse", mds_grade: "", mds_firstname: "Roza", …}
104:{mds_id: 291100247, mds_surname: "Knit", mds_role: "Doctor", mds_grade: "CONS", mds_firstname: "", …}




getInitialState: function(){
    var state = {
        medicalstaffs:CustomizationStore.getMedicalstaffs(),

        header: {
            onClick: (field) => {
                var staff = this.state.medicalstaffs;
                var sortedStaff = staff.sort(this._compareValues(field, 'desc'));
                this.setState({medicalstaffs: sortedStaff});
            },
        }
    };
    return util.joinObjects(state,this.updatedLists());
},



_compareValues: function(key, order='asc') {
    return function(a, b) {
        if(!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) {
            // property doesn't exist on either object
            return 0;
        }

        const varA = (typeof a[key] === 'string') ?
            a[key].toUpperCase() : a[key];
        const varB = (typeof b[key] === 'string') ?
            b[key].toUpperCase() : b[key];

        let comparison = 0;
        if (varA > varB) {
            comparison = 1;
        } else if (varA < varB) {
            comparison = -1;
        }
        return (
            (order == 'desc') ? (comparison * -1) : comparison
        );
    };
},

我的解決方案

        header: {
            onClick: (column) => {
                if(this.state.order === null || this.state.order === 'desc' ){
                    this.setState({order: 'asc'});
                } else {
                    this.setState({order: 'desc'});
                }

                const order = this.state.order;
                const key = column['property'];

                var byName = this.state.medicalstaffs.slice(0);
                byName.sort(function(a,b) {

                    const varA = (typeof a[key] === 'string') ?
                        a[key].toUpperCase() : a[key];
                    const varB = (typeof b[key] === 'string') ?
                        b[key].toUpperCase() : b[key];

                    let comparison = 0;
                    if (varA > varB) {
                        comparison = 1;
                    } else if (varA < varB) {
                        comparison = -1;
                    }
                    return (
                        (order == 'desc') ? (comparison * -1) : comparison
                    );

                });
                this.setState({medicalstaffs: byName});
            },
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM