Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.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_Jquery_Sorting - Fatal编程技术网

Javascript 按子数组项中的值对数组排序

Javascript 按子数组项中的值对数组排序,javascript,jquery,sorting,Javascript,Jquery,Sorting,我试图按“名称”项对对象/数组中的项进行排序 我使用此页面作为参考,并构建以下代码: var alphabet = { a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7, h: 8, i: 9, j: 10, k: 11, l: 12, m: 13, n: 14, o: 15, p: 16, q: 17, r: 18,

我试图按“名称”项对对象/数组中的项进行排序

我使用此页面作为参考,并构建以下代码:

var alphabet = {
    a: 1,
    b: 2,
    c: 3,
    d: 4,
    e: 5,
    f: 6,
    g: 7,
    h: 8,
    i: 9,
    j: 10,
    k: 11,
    l: 12,
    m: 13,
    n: 14,
    o: 15,
    p: 16,
    q: 17,
    r: 18,
    s: 19,
    t: 20,
    u: 21,
    v: 22,
    w: 23,
    x: 24,
    y: 25,
    z: 26
}

var test = {
    item: {
        name: "Name here",
        email: "example@example.com"
    },

    item2: {
        name: "Another name",
        email: "test@test.com"
    },

    item3: {
        name: "B name",
        email: "test@example.com"
    },

    item4: {
        name: "Z name",
        email: "example@text.com"
    }
};
test.sort(function (a, b) {return alphabet[a.name.charAt(0)] - alphabet[b.name.charAt(0)]});

console.log(test);
不幸的是,没有返回任何错误,console.log也不返回任何内容。 非常感谢您的帮助

编辑: 在给出答案之后,似乎变量“test”必须是一个数组,但是,该变量是在外部库中动态生成的,因此我编写了这段代码。 如果有人有同样的问题,请随意使用

var temp = [];
$.each(test, function(index, value){
    temp.push(this);
});

//temp is the resulting array

test
是一个对象,而不是数组。也许你想要这个:

var test = [
    {
        name: "Name here",
        email: "example@example.com"
    },
    ⋮
];
如果需要针对每个对象保留
项1
,…可以将它们添加为每个对象的字段:

var test = [
    {
        id: "item",
        name: "Name here",
        email: "example@example.com"
    },
    ⋮
];
要按字母顺序排序,您需要一个不区分大小写的比较器(并且忘记
字母表
对象):

compareAlpha=函数(a,b){
a=a.name.toUpperCase();b=b.name.toUpperCase();
返回ab-1:0;
};

测试是一个对象,而不是数组。也许你想要这个:

var test = [
    {
        name: "Name here",
        email: "example@example.com"
    },
    ⋮
];
如果需要针对每个对象保留
项1
,…可以将它们添加为每个对象的字段:

var test = [
    {
        id: "item",
        name: "Name here",
        email: "example@example.com"
    },
    ⋮
];
要按字母顺序排序,您需要一个不区分大小写的比较器(并且忘记
字母表
对象):

compareAlpha=函数(a,b){
a=a.name.toUpperCase();b=b.name.toUpperCase();
返回ab-1:0;
};

首先,测试应该是一个数组,而不是一个对象。其次,我认为您在选择字符后缺少对.toLowerCase()的调用

test.sort(function (a, b) {
    return alphabet[a.name.charAt(0).toLowerCase()] - alphabet[b.name.charAt(0).toLowerCase()];
});

首先,测试应该是一个数组,而不是一个对象。其次,我认为您在选择字符后缺少对.toLowerCase()的调用

test.sort(function (a, b) {
    return alphabet[a.name.charAt(0).toLowerCase()] - alphabet[b.name.charAt(0).toLowerCase()];
});

对象没有排序方法,只有数组!如果要对对象进行排序,最好的办法可能是将测试中的键映射到一个数组,然后从那里调用
sort
。您只能按第一个字母进行排序。具有相同首字母的多个名称将半随机排序。这就是您想要的吗?没有对象的
sort
方法——只有数组!如果要对对象进行排序,最好的办法可能是将测试中的键映射到一个数组,然后从那里调用
sort
。您只能按第一个字母进行排序。具有相同首字母的多个名称将半随机排序。这就是你想要的吗?啊,是的,我确实忘记了.toLowerCase()函数,它现在工作得很好!啊,是的,我确实忘记了.toLowerCase()函数,它现在工作得很好!compareAlpha函数的作用与当前标记的答案几乎相同吗?@xorinzor:不,它比较的是整个字符串(不仅仅是第一个字符),并且不依赖于
字母表
对象。compareAlpha函数的作用与当前标记的答案几乎相同吗?@xorinzor:不,它比较的是整个字符串(不仅仅是第一个字符)并且不依赖于
字母表
对象。