JavaScript:根据给定的字段数组对对象数组进行动态排序
我试图用JavaScript编写一个helper函数,它接受一个未排序的对象数组和一个字段数组,并根据给定的字段对数组进行排序。以下是我目前掌握的情况:JavaScript:根据给定的字段数组对对象数组进行动态排序,javascript,sorting,Javascript,Sorting,我试图用JavaScript编写一个helper函数,它接受一个未排序的对象数组和一个字段数组,并根据给定的字段对数组进行排序。以下是我目前掌握的情况: const sortByFieldsInPlace = (arr, fieldNames) => { arr.sort((a, b) => { for (const field of fieldNames) { if (a[field] > b[field]) return 1; if (a
const sortByFieldsInPlace = (arr, fieldNames) => {
arr.sort((a, b) => {
for (const field of fieldNames) {
if (a[field] > b[field]) return 1;
if (a[field] < b[field]) return -1;
}
});
};
这看起来不错,还是有人有更好的解决方案?我觉得您的解决方案不错,我会在for循环之外添加一个最终的“return 0”,以涵盖被比较对象相同的情况。除此之外,我想你已经办到了 这回答了你的问题吗。一定要超越公认的答案-解决多属性问题。
String.prototype.localeCompare()
-代码有什么问题?您的方法简洁明了。除非您希望提高性能,否则这是理想的IMO。您可以用两行替换4行排序谓词:let field=fieldNames.find(field=>a[field]!==b[field]);返回场?a[field].localeCompare(b[field]):0代码>但这只适用于字符串值。很好的调用。还可以防止控制台日志警告说预期将在箭头函数末尾返回值
const arr1 = [
{ name: 'A', code: 'D' },
{ name: 'B', code: 'A' },
{ name: 'A', code: 'Z' },
{ name: 'A', code: 'A' },
{ name: 'B', code: 'D' },
{ name: 'B', code: 'B' },
{ name: 'B', code: 'B' }
];
sortByFieldsInPlace(arr1, ['name', 'code'])
console.log(arr1)
// [
// { name: 'A', code: 'A' },
// { name: 'A', code: 'D' },
// { name: 'A', code: 'Z' },
// { name: 'B', code: 'A' },
// { name: 'B', code: 'B' },
// { name: 'B', code: 'B' },
// { name: 'B', code: 'D' }
// ]
const arr2 = [
{ name: 'A', code: 'D' },
{ name: 'B', code: 'A' },
{ name: 'A', code: 'Z' },
{ name: 'A', code: 'A' },
{ name: 'B', code: 'D' },
{ name: 'B', code: 'B', status: 10 },
{ name: 'B', code: 'B', status: 9 }
];
sortByFieldsInPlace(arr2, ['name', 'code', 'status'])
console.log(arr2)
// [
// { name: 'A', code: 'A' },
// { name: 'A', code: 'D' },
// { name: 'A', code: 'Z' },
// { name: 'B', code: 'A' },
// { name: 'B', code: 'B', status: 9 },
// { name: 'B', code: 'B', status: 10 },
// { name: 'B', code: 'D' }
// ]