sort() 方法用原地算法对数组的元素进行排序,并返回排序后的数组。 sort是一个高阶函数,可以传一个函数作为参数,假如传入函数为compareFunc(a,b),此时a为第一个用于比较的元素。b为第二个用于比较的元素。
sort排序大致有四种情况:
1,不传参数,sort会按照数组中各个元素转为的字符串的Unicode位点进行排序。
let arr = ['s','go','d','a','g','c','ge','l','z','bo'];
arr.sort(); //["a", "bo", "c", "d", "g", "ge", "go", "l", "s", "z"]
let nums = [1,5,3,7,10,12,4];
nums.sort(); //[1, 10, 12, 3, 4, 5, 7]
2,传入函数返回值为0时,a、b的位置不调换;
3,传入函数返回值大于0时,a、b的位置不变;
4,传入函数返回值小于0时,a、b的位置调换。
以上内容在mdn上可以查到,工作中遇到一个需求:
let arr = [
{ id: 4, name: '南瓜', isDelete: false },
{ id: 2, name: '茄子', isDelete: true },
{ id: 1, name: '娃娃菜', isDelete: false },
{ id: 3, name: '土豆', isDelete: true },
{ id: 5, name: '萝卜', isDelete: false },
{ id: 6, name: '白菜', isDelete: false }
]
要求isDelete为true的排在最后,其他元素位置不变,可以使用sort轻松实现:
let sortArr = (nums) => {
return nums.sort((a, b) => b.isDelete ? -1 : 0)
};
sortArr(arr)
如果要求isDelete为true的排在最后,其他元素按id增序排列,可以用以下方法:
var sortArr1 = (item) => {
return item.sort((a, b) =>{
if(b.isDelete) return -1;
if(!a.isDelete&&!b.isDelete) return a.id - b.id;
} )
};