使用自定义函数对数组进行排序[重复]
Posted
技术标签:
【中文标题】使用自定义函数对数组进行排序[重复]【英文标题】:Sort an array with custom function [duplicate] 【发布时间】:2020-08-30 18:19:03 【问题描述】:我用这段代码根据car
值对数组值进行排序。
const arr = [
car: 'audi',
age: 2015
,
car: 'bmw',
age: 1999
,
car: 'alfa',
age: 2019
,
];
function createSort(property)
return function compareString(a,b)
return a[property] < b[property]
const sortByTitle = createSort('car');
arr.sort(sortByTitle);
console.log(arr);
我不知道为什么它没有排序。 有什么问题?
【问题讨论】:
要比较字符串,请使用localeCompare:return a[property].localeCompare(b[property])
。有大量关于sorting using strings 的问题。
【参考方案1】:
短代码:
arr.sort((x, y) =>x.car.localeCompare(y.car));
完整代码:
const arr = [
car: 'audi',
age: 2015
,
car: 'bmw',
age: 1999
,
car: 'alfa',
age: 2019
,
];
let output = arr.sort((x, y) =>x.car.localeCompare(y.car));
console.log(output);
【讨论】:
【参考方案2】:编辑:@David 的回答似乎更好!
var arr = [
car: 'audi',
age: 2015
,
car: 'bmw',
age: 1999
,
car: 'alfa',
age: 2019
,
];
arr.sort(function(a, b)
if(a.car< b.car) return -1;
if(a.car> b.car) return 1;
return 0;
)
console.log(arr)
【讨论】:
【参考方案3】:排序如下:
const arr = [
car: 'audi',
age: 2015
,
car: 'bmw',
age: 1999
,
car: 'alfa',
age: 2019
,
];
function createSort(property)
return function compareString(a,b)
return a[property] > b[property]
const sortByTitle = createSort('car');
arr.sort(sortByTitle);
console.log(arr);
【讨论】:
代码没有排序【参考方案4】:这是你可以使用的通用函数,
function createSort (field)
return function sort (data1, data2)
let value1 = data1[field]
let value2 = data2[field]
return (value1 == null && value2 != null) ? -1
: (value1 != null && value2 == null) ? 1
: (value1 == null && value2 == null) ? 0
: (typeof value1 === 'string' && typeof value2 === 'string') ? value1.localeCompare(value2)
: (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0
【讨论】:
以上是关于使用自定义函数对数组进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章
usort — 使用用户自定义的比较函数对数组中的值进行排序