我有一个像这样结构的数组。
Object
(
[11065] => Object
(
[firtname] => Linda
[lastname] => Bell
[fullname] => Bell, Linda
)
[11110] => Object
(
[firstname] => Andrew
[lastname] => Smith
[fullname] => Andrew, Smith
)
[11279] => Object
(
[firstname] => Sabrina
[lastname] => Wu
[fullname] => Sabrina Wu
)
)
正如您所见,数组当前按[11065],[11110],[11279]
有没有办法按照JavaScript或jQuery中人的姓氏对这个数组进行排序?
答案 0 :(得分:2)
Use a compareFunction。为此,您需要将包含对象作为数组,因此您可能希望执行以下操作:
var a = [{id: 11065,
firstname: "Linda",
lastname: "Bell"},
{id: 11279,
firstname: "Sabrina",
lastname: "Wu"},
{id: 11110,
firstname: "Andrew",
lastname: "Smith"}
];
a.sort(function (a, b) { if (a.lastname > b.lastname) {
return 1;
} else if (a.lastname < b.lastname) {
return -1;
} else {
return 0;
}});
console.log(a);
答案 1 :(得分:1)
您使用的是对象,而不是数组。数组是一种特殊的对象,具有顺序命名的属性以及某些特殊的属性和方法来帮助访问它们。
Javascript对象属性未按任何特定顺序排序。根据规范,没有明确的顺序;大多数浏览器将使用定义属性的顺序。你不应该依赖任何特定的订单,也不应该改变它。
如果你想要一个有序的集合,你需要一个数组。
答案 2 :(得分:0)
Array.sort
采用函数参数来比较值。
Array.sort( function ( a, b ) {
if (a < b) return -1;
if (a > b) return 1;
return 0;
});
答案 3 :(得分:0)
如果我没弄错,你可以将比较函数传递给array.sort方法。 (如果我没有弄错的话,在所有浏览器中都不存在)。我相信他们周围有什么东西。 jQuery有一种可以肯定的功能。
无论如何,你会创建一个函数来根据姓氏而不是id来比较你的对象。
Array.sort( function ( a, b ) {
if (a.lastname < b.lastname) return -1;
if (a.lastname > b.lastname) return 1;
return 0;
});
扩展了Mimisbrunnr的例子。
答案 4 :(得分:0)
var data = [
{ name:"nate"},
{name:"john"},
{name:"paul"}
];
data.sort(function(a, b) {
return a.name > b.name;
});
答案 5 :(得分:0)
数组是对象。试试这个:
Array.prototype.sort.call(yourObject, function(x, y) {
return x.lastName > y.lastName;
});
我会接受lonesomeday的建议并使用实际的数组。
你的钥匙是什么意思吗?我会让它们成为数组中对象的属性。