使用 gulp-inject 注入到页面之前,需要对文件进行排序。在使用排序方法时发现 String.prototype.localeCompare 的这个方法在 Mac 和 Windows 环境结果不同。
使用 localeCompare 测试
[‘A', 'a', 'B', 'b'].sort(function(a, b) { return a.localeCompare(b); })
mac
[ 'A', 'B', 'a', 'b' ]
windows
[ ‘a', 'A', 'b', 'B' ]
不使用 localeCompare 测试
[‘A’, ‘a’, ‘B’, 'b'].sort();
mac
[ 'A', 'B', 'a', 'b' ]
windows
[ 'A', 'B', 'a', 'b' ]
根据 String.prototype.localeCompare() - JavaScript | MDN 说明,localeCompare 方法是和操作系统 locale 值相关。
我们可以使用 localeCompare 函数的第二个参数 locale 的 BCP 47 language 扩展 kf 参数来确定大小写优先顺序。
但首先需要先了解什么是 BCP 47 language tag ,啊,好麻烦...
也可以自定义检测字符大小写的函数作为 localCompare 的比较器
function caseInsensitiveComparator(valueA, valueB) {
var valueALowerCase = valueA.toLowerCase();
var valueBLowerCase = valueB.toLowerCase();
if (valueALowerCase < valueBLowerCase) {
return -1;
} else if (valueALowerCase > valueBLowerCase) {
return 1;
} else { //valueALowerCase === valueBLowerCase
if (valueA < valueB) {
return -1;
} else if (valueA > valueB) {
return 1;
} else {
return 0;
}
}
}
参考:
How to perform case insensitive sorting in Javascript? - Stack Overflow









网友评论