我有这个数组
const rows = [
{data: [{text: "A",value: 100}, {text: "B",value: 74}], group: "Elephant"},
{data: [{text: "C",value: 63}, {text: "D",value: 1}], group: "Elephant"},
{data: [{text: "E",value: 37}, {text: "F",value: 54}], group: "Penguin"},
{data: [{text: "G", value: 72}, {text: "H", value: 74}], group: "Lion"},
{data: [{text: "K", value: 76}, {text: "L", value: 38}], group: "Zebra"},
{data: [{text: "M", value: 68}, {text: "N", value: 21}], group: "Lion"},
];
这些排序函数
const _sortFunction = (
a,
b,
columnIndex,
sortOrder
) => {
if (a && a.data && b && b.data) {
if (a.data[columnIndex].value === b.data[columnIndex].value) {
return 0;
} else {
if (sortOrder === "ASC") return a.data[columnIndex].value > b.data[columnIndex].value ? -1 : 1;
if (sortOrder === "DESC") return a.data[columnIndex].value < b.data[columnIndex].value ? -1 : 1;
return 0;
}
} else {
return 0;
}
};
const sortRowsByColumn = (rows, sortProps) => {
if (sortProps && rows) {
const {indexOfColumnToSort, sortOrder} = sortProps;
const rowsCopy = JSON.parse(JSON.stringify(rows))
return rowsCopy.sort((a, b) => _sortFunction(a, b, indexOfColumnToSort, sortOrder));
}
return rows;
};
这给了我console.log(sortRowsByColumn(rows, {indexOfColumnToSort: 1, sortOrder: "ASC"}))
[
{data: [{text: "A", value: 100}, {text: "B", value: 74}], group: "Elephant"},
{data: [{text: "G", value: 72}, {text: "H", value: 74}], group: "Lion"},
{data: [{text: "E", value: 37}, {text: "F", value: 54}], group: "Penguin"},
{data: [{ text: "K", value: 76}, {text: "L", value: 38}], group: "Zebra"},
{data: [{text: "M", value: 68}, {text: "N", value: 21}], group: "Lion"},
{data: [{text: "C", value: 63}, {text: "D", value: 1}],group: "Elephant"}
]
然而,我想不通的是:
更新后的sortRowsByColumn()
函数应该
- 根据
group
键对rows
数组进行排序(按字母顺序) - 然后根据每个组的列索引进行排序
所有这一切都不会丢失原始的数组 struct .基本上类似于对每个组进行分组和排序,而不修改数组 struct 或原始array. 结果应该如下所示
[
{data: [{text: "A",value: 100}, {text: "B", value: 74}], group: "Elephant"},
{data: [{text: "C", value: 63}, {text: "D", value: 1}], group: "Elephant"},
{data: [{text: "G", value: 72}, {text: "H", value: 74}], group: "Lion"},
{data: [{text: "M", value: 68}, {text: "N", value: 21}], group: "Lion"},
{data: [{text: "E",value: 37}, {text: "F", value: 54}], group: "Penguin"},
{data: [{text: "K", value: 76}, {text: "L", value: 38}], group: "Zebra"},
]