[英]Javascript sort array of dictionaries alphabetically with possible null values
我遇到了一个问题。 我按联系人的名字对联系人进行排序,但是有时我碰到缺少名字的联系人。 有谁知道如何更改此方法以使其起作用? 谢谢
这是我正在使用的排序方法。
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);
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
};
这取决于您如何对待不具有该属性的对象。
但是将其添加到排序功能的顶部将阻止它比较不存在的属性。
if (ob1.firstName == undefined || ob2.firstName == undefined) {
return 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
};
在比较之前,请先检查对象及其属性的存在。 如果他们错过了它,则返回1
oder -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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.