JavaScript比较字符串
原文:Compare Strings in JavaScript
JavaScript的比较运算符很容易比较字符串,另外还有localeCompare()
可以用于排序。
JavaScript中,两个字符串相等代表什么?一个字符串大于另一个又代表什么?
JavaScript的三等运算符===
,在两个字符串完全相同时返回true
,否则返回false
:
1 | 'hello' === 'hello'; // true |
<
和>
运算符按词法顺序比较字符串。词法顺序基本上等同于“字典顺序”。简单的说,如果按ASCII表顺序,a
的第一个字符在b
的第一个字符之前,那么a < b
;如果a
和b
的第一个字符相等,而a.slice(1) < b.slice(1)
,那么也是a < b
。
1 | 'alpha' < 'zeta'; // true, 因为'a'在'z'之前 |
字符串数组排序
JavaScript的Array#sort()
函数按词法顺序自动排序。
1 | ['Zeta', '1', 'alpha', ''].sort(); // ['', '1', 'Zeta', 'alpha'] |
lodash的sortBy()
函数对字符串数组也默认按词法顺序排序。
1 | _.sortBy(['Zeta', '1', 'alpha', '']); // ['', '1', 'Zeta', 'alpha'] |
一个对象数组,如何按字符串属性排序?Array#sort()
接收一个回调函数作为参数,回调接收2个值a
和b
,返回值如下:
- 0 如果a和b相等
- 正数 如果a > b
- 负数 如果a < b
给定一个对象数组,对象中包含lastName
属性,以下是按lastName
对数组排序的一种方法。
1 | const characters = [ |
更简单的方法是使用JavaScript内置的localeCompare()
函数。调用a.localeCompare(b)
,如果a < b
,返回-1
,如果a === b
,返回0
,如果a > b
,返回1
。
1 | const characters = [ |