我試圖在我的表標題單擊上對 json 陣列進行排序。我正在嘗試關注這篇網路文章。我的函式運行但陣列從未改變。這是函式:
function setInvoiceSortField(field) {
console.log(field);
let sortedInvoices = this.state.invoiceList;
if (field !== null) {
sortedInvoices.sort((a, b) => {
console.log(`a ${a[field]}`);
console.log(`b ${b[field]}`);
if (a[field] < b[field]) {
return -1;
}
if (a[field] > b[field]) {
return 1;
}
return 0;
});
this.setState({ invoiceList: sortedInvoices });
}
}
如果需要,我可以發布 json 陣列和/或整個 .js 檔案的示例。是.sort()改變sortedInvoices還是回傳一個排序的陣列?非常感謝任何提示或幫助!
更新
我添加了一個 if 來檢查它們是否匹配 post sort 并且它們匹配。
function setInvoiceSortField(field) {
console.log(field);
let sortedInvoices = this.state.invoiceList;
if (field !== null) {
sortedInvoices.sort((a, b) => {
console.log(`a ${a[field]}`);
console.log(`b ${b[field]}`);
if (a[field] < b[field]) {
return -1;
}
if (a[field] > b[field]) {
return 1;
}
return 0;
});
if (sortedInvoices === this.state.invoiceList) {
console.log("matched")
}
this.setState({ invoiceList: sortedInvoices });
}
}
uj5u.com熱心網友回復:
來自MDN 網站:
sort() 方法就地對陣列的元素進行排序,并回傳排序后的陣列。示例復制。
const months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort();
console.log(months);
// expected output: Array ["Dec", "Feb", "Jan", "March"]
uj5u.com熱心網友回復:
由于您直接將陣列(this.state.invoiceList)分配給 sortedInvoices,因此它將通過參考完成。因此,即使您的 array(sortedInvoices) 與 invoiceList 不同,兩個參考也是相同的。因此沒有反映變化。
function setInvoiceSortField(field) {
console.log(field);
let sortedInvoices = [...this.state.invoiceList];
if (field !== null) {
sortedInvoices.sort((a, b) => {
console.log(`a ${a[field]}`);
console.log(`b ${b[field]}`);
if (a[field] < b[field]) {
return -1;
}
if (a[field] > b[field]) {
return 1;
}
return 0;
});
this.setState({ invoiceList: sortedInvoices });
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/370738.html
標籤:javascript 数组 反应 排序
