0

我有一个对象数组,如下所示:

var array = {
    "112" : {
             "id": "3",
             "name": "raj"
    },
    "334" : {
             "id": "2",
             "name": "john"
    },
    "222" : {
             "id": "5",
             "name": "kelvin"
    }
}

现在我想按升序对数组进行排序,id然后在数组中恢复它。我尝试使用sort()但无法做到。请帮助如何做到这一点,当我显示来自数组的数据时,它会被排序。

4

6 回答 6

1
var array = {
    "112" : {
         "id": "3",
         "name": "raj"
    },
    "334" : {
         "id": "2",
         "name": "john"
    },
    "222" : {
         "id": "5",
         "name": "kelvin"
    }
}
var sortedObject = Array.prototype.sort.apply(array);

result:
{
    "112": {
        "id": "3",
        "name": "raj"
    },
    "222": {
        "id": "5",
        "name": "kelvin"
        },
    "334": {
        "id": "2",
        "name": "john"
    }
}
于 2015-03-04T15:56:37.540 回答
1

假设你的意思是你的代码是一个对象数组,即:

var unsortedArray = [
    { id: 3, name: "raj" },
    { id: 2, name: "john" },
    { id: 5, name: "kelvin" } 
];

然后,您可以通过将一个函数传递给比较 id 的 Array.sort() 来按 id 排序:

var sortedArray = unsortedArray.sort(function(a, b) {
    return a.id - b.id 
});

正如其他人指出的那样,您拥有的是一个包含对象的对象,而不是一个数组。

于 2012-06-07T12:39:35.230 回答
0

JavaScript 对象根据定义是无序的。语言规范甚至不保证,如果您连续两次迭代对象的属性,它们第二次将以相同的顺序出现。

如果您需要订购物品,请使用数组和Array.prototype.sort方法。

于 2012-06-07T12:34:17.993 回答
0

那是一个对象,但您可以像这样对数组进行排序:

工作演示:http: //jsfiddle.net/BF8LV/2/

希望这有帮助,

代码

   function sortAscending(data_A, data_B)
{
    return (data_A - data_B);
}
var array =[ 9, 10, 21, 46, 19, 11]
array.sort(sortAscending) 
alert(array);​
于 2012-06-07T12:32:45.857 回答
0

这不是一个数组,它是一个对象(或者如果不是因为语法错误(=应该是:))。它没有订单。

您可以改用数组(使当前属性名称成为子对象上键的值)。

或者,您可以使用for循环来构建键名数组,然后对其进行排序并将其用作按顺序访问对象的基础。

于 2012-06-07T12:31:02.037 回答
0

没有多少人知道它Array.sort 可以用于其他类型的对象,但它们必须具有长度属性:

array.length = 334;
Array.prototype.sort.call(array, function(a, b) {return a.id - b.id;});

不幸的是,如果您的“阵列”充满了像您这样的“洞”,这将无法正常工作。

于 2012-06-07T12:41:22.213 回答