我想問一下 array.sort() 正在尋找關于這種問題的解決方案如何對具有這種結構的陣列進行排序
array.sort((a, b) => a.foo.foo1.foo2 - b.foo.foo1.foo2)
這在哪里作業,但在為多個用例重寫代碼之后
export const handleSort = (arr, sortBy, desc) => {
arr = [...arr];
if (desc) {
return arr.sort((a, b) => b[sortBy] - a[sortBy]);
} else {
return arr.sort((a, b) => a[sortBy] - b[sortBy]);
}
以后如果我需要喜歡
return arr.sort((a, b) => b[sortBy][0][1] - a[sortBy][0][1]);
我不能用這個
uj5u.com熱心網友回復:
您可以使用函式和陣列來獲取正確的屬性。
const
getValue = (object, keys) => keys?.length
? keys.reduce((o, k) => o[k], object)
: object,
ASC = (a, b) => a - b,
DESC = (a, b) => b - a,
sortBy = (order, keys) => (a, b) => order(getValue(a, keys), getValue(b, keys)),
keys = ['foo', 'foo1', 'foo2'],
data = [{ foo: { foo1: { foo2: 7 } } }, { foo: { foo1: { foo2: 2 } } }, { foo: { foo1: { foo2: 9 } } }, { foo: { foo1: { foo2: 6 } } }, { foo: { foo1: { foo2: 1 } } }, { foo: { foo1: { foo2: 4 } } }];
// usage
data.sort(sortBy(ASC, keys));
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
uj5u.com熱心網友回復:
也許一個好主意是定義將處理獲取屬性以進行比較的函式?
const handleSort = (arr, desc, getValue) => {
if (desc) {
return arr.sort((a,b) => getValue(a) - getValue(b));
}
return arr.sort((a,b) => getValue(b) - getValue(a));
}
這樣,您可以使用如下函式:
return handleSort(myArray, true, (obj) => obj.foo.foo1.foo2);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/444600.html
標籤:javascript 数组 反应 排序
