H246802/30-days-challenge

day-08-数组sort排序自定义

Opened this issue · 2 comments

写一个 byField 函数,实现数组按姓名、年纪任意字段排序

var users = [
  { name: 'John', age: 20, company: 'Baidu' },
  { name: 'Pete', age: 18, company: 'Alibaba' },
  { name: 'Ann', age: 19, company: 'Tencent' }
];

users.sort(byField('company'))
// 输出
/*
[
  { name: 'Pete', age: 18, company: 'Alibaba' },
  { name: 'John', age: 20, company: 'Baidu' },
  { name: 'Ann', age: 19, company: 'Tencent' }
];
*/
users.sort(byField('name'))
// 输出
/*
[
  { name: 'Ann', age: 19, company: 'Tencent' },
  { name: 'John', age: 20, company: 'Baidu' },
  { name: 'Pete', age: 18, company: 'Alibaba' },
];
*/

针对数组对象排序

  function byField(name) {
    return function (o, p) {
      var a = o[name]
      var b = p[name]
      if (typeof o === 'object' && typeof p === 'object' && o && p) {
        if (a === b) {
          return 0
        }
        if (typeof a === typeof b) {
          return a > b ? 1 : -1
        }
        return typeof a > typeof b ? 1 : -1
      } else {
        throw{
          name: 'Error',
          message: 'Expected an object when sorting by' + name
        }
      }
    }
  }

普通数字字符排序

function byField(a,b){
   return  a > b ? 1 : -1
}