使用自定义函数对数组进行排序[重复]

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 — 使用用户自定义的比较函数对数组中的值进行排序

php多维数组自定义排序 uasort()

php多维数组自定义排序 uasort()

usort() 自定义排序

使用 PHP usort() 通过用户自定义的比较函数对数组进行排序

二维数组重新排序