[英]sorting an array of objects explained
我有這個對象數組(摘要)->來自工作人員的狀態。
我按照我從這里獲得的示例運行
但是在運行它時,它什么也不做,並且逐步執行它表明a
和b
參數從未初始化。
我真的不明白它是如何工作的。 請您解釋一下發生了什么,而無需將我分發給一些重復的讀者。 我想了解這一點。
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.