[英]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.