javascript - 按子数组项中的值对数组进行排序

标签 javascript jquery sorting

我正在尝试按“名称”项目对对象/数组中的项目进行排序,

我使用此页面作为引用Sort array of objects并构建下面的代码段:

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"
    },
    ⋮
];

如果您需要针对每个对象保留 itemitem1...,您可以将它们添加为每个对象的字段:

var test = [
    {
        id: "item",
        name: "Name here",
        email: "example@example.com"
    },
    ⋮
];

要按字母顺序排序,您需要一个不区分大小写的比较器(并且忘记 alphabet 对象):

compareAlpha = function(a, b) {
  a = a.name.toUpperCase(); b = b.name.toUpperCase();
  return a < b ? -1 : a > b ? 1 : 0;
};

关于javascript - 按子数组项中的值对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10167120/

相关文章:

javascript - 如何在 Safari 中覆盖 ctrl-f

javascript - window.onload 未在 IE 中触发

c# - wpf 以编程方式设置排序,以便将标题切换为已排序

javascript - Leaflet:隐藏/显示动态插入 map 中的标记

javascript - 自定义日期范围排序

c - 按名称或年份对飓风进行排序的 C 程序

javascript - 如何获取第一个数组中第一个对象的第一个值

javascript - 是 tabIndex : 0 in links considered a good practice in order to avoid href ="javascript: void(0);"?

Javascript:获取鼠标相对于父元素的位置

javascript - 动态创建元素的延迟加载