【发布时间】:2020-11-11 19:31:57
【问题描述】:
我有一个对象数组,我尝试对其应用 2 种排序。对“name”属性进行简单的字母排序,然后对“rank”属性进行排序,该属性可以是数字或空值。具有 null 'rank' 的对象应排序到最终数组的末尾。
此代码在 Chrome、Safari 和 Edge 中按预期工作。然而,在 Firefox 中,它会颠倒所有具有 null 'rank' 的对象的字母顺序。
JSFiddle:https://jsfiddle.net/6Lfu1z39/
代码:
const data = [
{
"name": "F",
"rank": 2
},{
"name": "B",
"rank": null
},{
"name": "A",
"rank": 1
},{
"name": "E",
"rank": null
},{
"name": "D",
"rank": null
},{
"name": "C",
"rank": 2
}
]
const nameSort = (a, b) => {
const nameA = a.name.toUpperCase();
const nameB = b.name.toUpperCase();
if (nameA < nameB) {
return -1;
} else if (nameA > nameB) {
return 1;
}
return 0;
};
const rankSort = (a, b) => {
if (a.rank === null) {
return 1;
} else if (b.rank === null) {
return -1;
}
return 0;
}
console.log('name only', data.sort(nameSort));
console.log('name and rank', data.sort(nameSort).sort(rankSort));
这里哪个浏览器是正确的?或者,可以做些什么来使浏览器之间保持一致?
【问题讨论】:
标签: javascript arrays sorting firefox