Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript按字母顺序对字典数组进行排序,可能包含空值_Javascript_Arrays_Sorting - Fatal编程技术网

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
}