尝试实现如下自定义排序:
// 1. sort by 'value' column, here 'a' (first object) and b (second object) has difference equals to 4.5 or less then 4.5 then,
// consider equal values (even though it's 12.12 and 13.22)
// then 2. sort by 'altValue' column (as equal value found on 'value' column) and then,
// 3. sort by 'name' column (as equal value found on 'altValue').
const validSortEqualityDiffence = 4.5;
const inputArray = [
{ id: 1, name: 'ABC INC.', value: 12.12, altValue: 22.22 },
{ id: 2, name: 'DBC INC.', value: 13.22, altValue: 23.32 },
{ id: 3, name: 'DBC INC.', value: 15.22, altValue: 25.42 },
{ id: 4, name: 'CBC INC.', value: 12.22, altValue: 22.32 },
{ id: 5, name: 'CBC INC.', value: 16.22, altValue: 26.32 },
{ id: 6, name: 'QBC INC.', value: 13.52, altValue: 23.72 },
{ id: 7, name: 'QBC INC.', value: 11.02, altValue: 21.92 },
];
/*下面的代码错误为在此处找不到'b'值*/
_.orderBy(
inputArray,
(a, b) => {
console.log('a,b', a, b); // b is undfined
if (Math.abs(a.value - b.value) <= validSortEqualityDiffence) {
return 0;
}
if (a.value < b.value) {
return -1;
}
return 1;
},
(a, b) => {
console.log('a,b', a, b); // b is undfined
if (Math.abs(a.altValue - b.altValue) <= validSortEqualityDiffence) {
return 0;
}
if (a.altValue < b.altValue) {
return -1;
}
return 1;
},
'name'
);
此处,无法获取“b”对象。
有没有其他方法可以使用Array.sort或其他lodash方法来帮助实现,使用自定义差异进行排序,并考虑按列排序。
非常感谢。