我遇到了一个问题。我按照他们的名字对联系人进行排序,但有时我会遇到一个缺少名字的联系人。有谁知道如何更改此方法以使其工作? 感谢
这是我正在使用的排序方法。
function sortAZ(ob1,ob2) {
var n1 = ob1.firstName.toLowerCase()
var n2 = ob2.firstName.toLowerCase()
if (n1 > n2) {return 1}
else if (n1 < n2){return -1}
else { return 0}//nothing to split
};
data.sort(sortAZ);
答案 0 :(得分:1)
function sortAZ(ob1,ob2) {
// Handles case they're both equal (or both missing)
if (obj1 == obj2) {return 0}
// Handle case one is missing
if (obj2 == null|| obj2 == "") {return 1}
if (obj1 == null|| obj1 == "") {return -1}
var n1 = ob1.firstName.toLowerCase()
var n2 = ob2.firstName.toLowerCase()
if (n1 > n2) {return 1}
else if (n1 < n2){return -1}
else { return 0}//nothing to split
};
答案 1 :(得分:0)
这取决于您希望如何处理没有该属性的对象。
但是将它添加到sort函数的顶部会阻止它比较不存在的属性。
if (ob1.firstName == undefined || ob2.firstName == undefined) {
return 0;
}
答案 2 :(得分:0)
请注意,这是对PherricOxide答案的修改。感谢
function sortAZ(obj1,obj2) {
// Handles case they're both equal (or both missing)
if (obj1 == obj2) {return 0}
// Handle case firstName is missing
if (obj2.firstName == null || obj2.firstName == "") {return 1}
if (obj1.firstName == null || obj1.firstName == "") {return -1}
var n1 = ob1.firstName.toLowerCase()
var n2 = ob2.firstName.toLowerCase()
if (n1 > n2) {return 1}
else if (n1 < n2){return -1}
else { return 0}//nothing to split
};
答案 3 :(得分:0)
在比较之前首先检查对象及其属性是否存在。如果他们错过了,请返回1
或-1
对其进行排序或最终排序。
function sortAZ(ob1, ob2) {
if (!ob1) return -1;
if (!ob2) return 1;
// if (ob1 == ob2) return 0; // equal
if (typeof ob1.firstName != "string") return -1;
if (typeof ob2.firstName != "string") return -1;
var n1 = ob1.firstName.toLowerCase()
var n2 = ob2.firstName.toLowerCase()
if (n1 > n2) return 1;
if (n1 < n2) return -1;
return 0; // equal
}