我正在尝试按“名称”项目对对象/数组中的项目进行排序,
我使用此页面作为引用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"
},
⋮
];
如果您需要针对每个对象保留 item
、item1
...,您可以将它们添加为每个对象的字段:
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/