在Javascript中对[Object Object]数组进行排序

时间:2011-07-06 16:53:10

标签: javascript

我有一个像这样结构的数组。

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]

给出的人员ID排序

有没有办法按照JavaScript或jQuery中人的姓氏对这个数组进行排序?

6 个答案:

答案 0 :(得分:2)

带有Array.sort(compareFunction)的

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的建议并使用实际的数组。

你的钥匙是什么意思吗?我会让它们成为数组中对象的属性。