Javascript按字母顺序对字典数组进行排序,可能包含空值
我遇到了一个问题。我正在按联系人的名字对其进行排序,但有时我会遇到一个缺少名字的联系人。有人知道如何改变这个方法使它工作吗? 谢谢 这是我正在使用的排序方法Javascript按字母顺序对字典数组进行排序,可能包含空值,javascript,arrays,sorting,Javascript,Arrays,Sorting,我遇到了一个问题。我正在按联系人的名字对其进行排序,但有时我会遇到一个缺少名字的联系人。有人知道如何改变这个方法使它工作吗? 谢谢 这是我正在使用的排序方法 function sortAZ(ob1,ob2) { var n1 = ob1.firstName.toLowerCase() var n2 = ob2.firstName.toLowerCase() if (n1 > n2) {return 1} else if (n1 < n2){return
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);
功能sortAZ(ob1、ob2){
var n1=ob1.firstName.toLowerCase()
var n2=ob2.firstName.toLowerCase()
如果(n1>n2){返回1}
else如果(n1
功能sortAZ(ob1、ob2){
//处理它们都相等(或都缺少)的情况
如果(obj1==obj2){返回0}
//处理一号案件
如果(obj2==null | | obj2==“”){return 1}
如果(obj1==null | | obj1==“”){return-1}
var n1=ob1.firstName.toLowerCase()
var n2=ob2.firstName.toLowerCase()
如果(n1>n2){返回1}
else如果(n1
这取决于您希望如何处理不具有该属性的对象
但是将其添加到sort函数的顶部将阻止它比较不存在的属性
if (ob1.firstName == undefined || ob2.firstName == undefined) {
return 0;
}
注:这是对Phericoxide答案的修改。谢谢
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
};
功能sortAZ(obj1、obj2){
//处理它们都相等(或都缺少)的情况
如果(obj1==obj2){返回0}
//缺少句柄case firstName
if(obj2.firstName==null | | obj2.firstName==“”){return 1}
如果(obj1.firstName==null | | obj1.firstName==“”){return-1}
var n1=ob1.firstName.toLowerCase()
var n2=ob2.firstName.toLowerCase()
如果(n1>n2){返回1}
else如果(n1
在比较之前,首先检查对象是否存在及其属性。如果未找到,请返回1
order-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
}
功能sortAZ(ob1、ob2){
如果(!ob1)返回-1;
如果(!ob2)返回1;
//if(ob1==ob2)返回0;//等于
if(typeof ob1.firstName!=“string”)返回-1;
if(typeof ob2.firstName!=“string”)返回-1;
var n1=ob1.firstName.toLowerCase()
var n2=ob2.firstName.toLowerCase()
如果(n1>n2)返回1;
如果(n1
我稍微修改了一下,但似乎无法在评论中发布。我会把它贴在下面。感谢您的回答,它似乎工作得很好。返回0
虽然不是(总是)正确的回答。
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
}