JavaScript中关于sort的使用

sort的作用

sort用来对数组中的元素进行排序,并返回相同数组的引用,接收一个函数作为参数,如果没有参数,默认按照字典(先比较第一个字符,如果第一个字符相等,再比较第二个字符依次类推,从小到大排列)排序,将元素转换为字符串,然后比较它们的 UTF-16 代码单元值序列。

注意:该方法会改变原数组;

let months = ['March', 'Jan', 'Feb', 'Dec'];
let monthsCopy = months.sort();
console.log(monthsCopy) // [ 'Dec', 'Feb', 'Jan', 'March' ]
// 此处改变了monthsCopy,导致months也发生了改变
monthsCopy[0] = 'bbbb';
console.log(months) // [ 'bbbb', 'Feb', 'Jan', 'March' ]

sort接收参数时的用法

sort接收一个函数作为参数,该函数用来决定排序的顺序(升序还是降序),注意:

const numberItems = [1, 30, 4, 21, 100000]

// 该函数的a和b表示items中的任意一个元素
// 如果该函数返回一个正数则 a 排在后面
// 如果该函数返回一个负数则 a 排在前面
function comparefn(a, b) {
    if(a > b) { // 此处判断语句就表示了升序排列,因为a > b 时,该函数返回一个正数,a排在后面
	    return 1
    }
    if(a < b) { // 同上理由
	    return -1
    }
    return 0 // 保持原来顺序
}

console.log(numberItems.sort(comparefn)) // [ 1, 4, 21, 30, 100000 ]

因为上面的代码是对数组中的元素都是number类型的所以可以简写为:(原理跟上面的代码是一样的)

const numberItems = [1, 30, 4, 21, 100000]
function comparefn(a, b) {
    // return b - a // 降序
    return a - b // 升序
}

console.log(numberItems.sort(comparefn)) // [ 1, 4, 21, 30, 100000 ]

对象数组的排序

对象数组可以通过比较它们的某个属性的值来排序:

const objItems = [
  { name: "Edward", value: 21 },
  { name: "Sharpe", value: 37 },
  { name: "And", value: 45 },
  { name: "The", value: -12 },
  { name: "Magnetic", value: 13 },
  { name: "Zeros", value: 37 },
  { name: "Zeros", value: 14 },
];
// 根据里面的value及升序排序
// 注意:因为这里比较数字而非字符串,比较函数可以简单的用 a 减 b 的形式
// console.log(items.sort( (a, b) => a.value - b.value ))

// 根据name进行排序
function comparefn(a, b) {// a和b 是数组中的任意两个元素
	const aName = a.name.toUpperCase(); // 忽略大小写
	const bName = b.name.toUpperCase(); // 忽略大小写
	
	// 这个判断语句的意思是:a中的name属性值与b中name值进行比较,如果aName < bName 则 a就排在后面
	if(aName < bName) { 
		return 1
	}
	// 这个判断语句的意思是:a中的name属性值与b中name值进行比较,如果aName > bName 则 a就排在前面
	if(aName > bName) { // 如果返回负数 则 a 排在前面
		return -1
	}
	
	// 如果以上两个判断语句都没执行,表明:aName === bName 则保持原来位置不变
	return 0; // 如果返回 0 a和b位置不变
}
// 注意:javascript的字符串大小比较是按照字符串中对应的字符在编码表(UTF-16)中的数值的大小来进行比较的,比如'abcd'和'abaa'进行比较,先比较第一个字符,发现他们都是a大小一样,然后就会比较第二个发现都是b,然后比较第三个字符c的编码大于a,比较出了大小,所以字符串abcd大于字符串abaa
console.log(items.sort(comparefn))

本文参考以下文章:

mdn

javascript的字符串大小比较

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值