搞vue项目时遇到这个问题,特此记录下。
问题:
后端返给我的排期列表没有根据放映时间进行排序,数据是一个对象数组。接收到数据后我用sort()对数据根据放映时间进行了排序,发现android展示正常,ios还是乱序。ios展示如下
//原先的代码
//按时间排序
let desc = function (a, b) {
return Date.parse(a["startTime"]) - Date.parse(b["startTime"]);
};
let arr = this.indexMovieList.plan[this.startDate];
this.indexMovieList.plan[this.startDate] = arr.sort(desc);
修复:
使用 localeCompare() 方法进行字符串比较
语法
stringObject.localeCompare(target)
| 参数 | 描述 |
|---|---|
| target | 要以本地特定的顺序与 stringObject 进行比较的字符串。 |
返回值
说明比较结果的数字。如果 stringObject 小于 target,则 localeCompare() 返回小于 0 的数。如果 stringObject 大于 target,则该方法返回大于 0 的数。如果两个字符串相等,或根据本地排序规则没有区别,该方法返回 0。
说明
把 < 和 > 运算符应用到字符串时,它们只用字符的 Unicode 编码比较字符串,而不考虑当地的排序规则。以这种方法生成的顺序不一定是正确的。例如,在西班牙语中,其中字符 “ch” 通常作为出现在字母 “c” 和 “d” 之间的字符来排序。
localeCompare() 方法提供的比较字符串的方法,考虑了默认的本地排序规则。ECMAscript 标准并没有规定如何进行本地特定的比较操作,它只规定该函数采用底层操作系统提供的排序规则。
实例
在本例中,我们将用本地特定排序规则对字符串数组进行排序:
var str;
str.sort (function(a,b){return a.localeCompare(b)})
修复后的代码
//修复后的代码
//按时间排序
let desc = function (a, b) {
return a["startTime"].localeCompare(b["startTime"])
};
let arr = this.indexMovieList.plan[this.startDate];
this.indexMovieList.plan[this.startDate] = arr.sort(desc);