使用自定义函数对数组进行排序

时间:2020-05-14 09:12:47

标签: javascript

我将这段代码用于根据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);

我不知道为什么它不能排序。
问题是什么?

4 个答案:

答案 0 :(得分:3)

短代码:

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);

答案 1 :(得分:1)

编辑:@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)

答案 2 :(得分:0)

排序如下:

   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);

答案 3 :(得分:0)

这是您可以使用的通用功能,

    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
     }
    }