Angular实现 js 的 sort 方法

sort() 方法用于对数组的元素进行排序,并返回数组。

默认排序顺序是根据字符串UniCode码。因为排序是按照字符串UniCode码的顺序进行排序的,所以首先应该把数组元素都转化成字符串(如有必要),以便进行比较。

语法:arrayObject.sort(sortby);

参数sortby  可选,用来规定排序的顺序,但必须是函数。

注意:数组在原数组上进行排序,不生成副本。

例一:按照字母顺序排序

const arr = ['tom', 'ben', 'lina', 'haiqi'];
console.log(arr.sort());
// ["ben", "haiqi", "lina", "tom"]

例二:还是按照字母进行排序

const arr = ['22', '201', '13', '1000'];
console.log(arr.sort());
// ["1000", "13", "201", "22"]

输出结果可能和想象中的不一样,但是这是按照这些数字在Unicode字符集中的顺序进行排序的。

如果想按照其他标准进行排序,就需要提供比较函数。

例三:升序排列

sortBy(a: any, b: any): number {
  return a - b;
}

const arr = ['22', '201', '13', '1000'];
console.log(arr.sort(this.sortBy));
// ["13", "22", "201", "1000"]

解释:排序思想应该是类似于冒泡排序思想

若 a 小于 b,即 a - b 小于零,则返回一个小于零的值,数组将按照升序排列,即 a 将排在 b 的前面。

若 a 等于 b,则返回 0。

若 a 大于 b, 即 a - b 大于零,则返回一个大于零的值,数组将按照降序排列,即 a 将排在 b 的后面。

例四:降序排序

sortBy(a: any, b: any): number {
  return b - a;
}

const arr = ['22', '201', '13', '1000'];
console.log(arr.sort(this.sortBy));
// ["1000", "201", "22", "13"]

例五:按照数组对象中某个属性值进行排序

sortBy(key: string): any {
  return ((a: any, b: any) => {
    if (a[key] < b[key]) {
      return -1;
    } else if (a[key] > b[key]) {
      return 1;
    } else {
      return 0;
    }
  });
}

const arr = [{ name: 'lina', age: 25 }, { name: 'ben', age: 22 }, { name: 'xiaoling', age: 33 }, { name: 'jun', age: 18 }];
console.log(JSON.stringify(arr.sort(this.sortBy('name'))));
// [{"name":"ben","age":22},{"name":"jun","age":18},{"name":"lina","age":25},{"name":"xiaoling","age":33}]

return -1 表明第一个参数应该排在第二个参数的左边。

return 1 表明第一个参数排在第二个参数的后面。

return 0 表示位置不变。

例六:根据参数来确定是升序还是降序

sortBy(key: string, flag?: boolean): any {
  let rev: number;
  if (flag === undefined) {
    rev = 1;
  } else {
    rev = (rev) ? 1 : -1;
  }

  return ((a: any, b: any) => {
    if (a[key] < b[key]) {
      return rev * -1;
    } else if (a[key] > b[key]) {
      return rev * 1;
    } else {
      return 0;
    }
  });
}

const arr = [{ name: 'lina', age: 25 }, { name: 'ben', age: 22 }, { name: 'xiaoling', age: 33 }, { name: 'jun', age: 18 }];
console.log(JSON.stringify(arr.sort(this.sortBy('name'))));
// [{"name":"ben","age":22},{"name":"jun","age":18},{"name":"lina","age":25},{"name":"xiaoling","age":33}]

sortBy(key: string, flag?: boolean): any {
  let rev: number;
  if (flag === undefined) {
    rev = 1;
  } else {
    rev = (rev) ? 1 : -1;
  }

  return ((a: any, b: any) => {
    if (a[key] < b[key]) {
      return rev * -1;
    } else if (a[key] > b[key]) {
      return rev * 1;
    } else {
      return 0;
    }
  });
}
const arr = [{ name: 'lina', age: 25 }, { name: 'ben', age: 22 }, { name: 'xiaoling', age: 33 }, { name: 'jun', age: 18 }];
console.log(JSON.stringify(arr.sort(this.sortBy('name', false))));
// [{"name":"xiaoling","age":33},{"name":"lina","age":25},{"name":"jun","age":18},{"name":"ben","age":22}]

 

你可能感兴趣的:(B-JavaScript)