如何按数字升序对对象数组进行排序
How to sort an array of objects in ascending order of number?
我有一个对象数组,如下所示:
var array = {
"112" : {
"id": "3",
"name": "raj"
},
"334" : {
"id": "2",
"name": "john"
},
"222" : {
"id": "5",
"name": "kelvin"
}
}
现在我想按id
的升序对数组进行排序,然后在数组中恢复它。我尝试使用sort()
但无法做到。请帮助如何操作,以便当我显示数组中的数据时,它会排序。
假设你的意思是你的代码是一个对象数组,即:
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
});
正如其他人所指出的,你拥有的是一个包含对象的对象,而不是一个数组。
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"
}
}
这不是
一个数组,它是一个对象(或者如果不是因为语法错误(=
应该是:
))。它没有订单。
您可以改用数组(使当前属性名称成为子对象上的键的值)。
或者,您可以使用 for
循环来构建一个键名数组,然后对其进行排序并将其用作按顺序访问对象的基础。
JavaScript 对象根据定义是无序的。语言规范甚至不能保证,如果你连续两次迭代对象的属性,它们第二次会以相同的顺序出现。
如果需要对东西进行排序,请使用数组和 Array.prototype.sort
方法。
这是一个对象,但你可以对数组进行排序:
工作演示: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);
没有多少人知道Array.sort
可以用于其他类型的对象,但它们必须具有长度属性:
array.length = 334;
Array.prototype.sort.call(array, function(a, b) {return a.id - b.id;});
不幸的是,如果您的"数组"充满了像您这样的"漏洞",这效果不佳。
相关文章:
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- Javascript中的多维数组排序索引问题
- 如何按日期对Javascript对象数组排序
- 数组排序后显示更改
- 当许多元素相等时,Javascript数组排序无法正常工作
- Javascript数组排序速度受字符串长度的影响
- 按唯一键将对象数组排序为数组
- 以 js 为单位的数组排序
- js 数组排序无法正常工作
- 数组排序.论点从何而来
- 不需要的数组排序
- 数组排序不正确/不可预测,使用 indexOf 时
- Javascript将数组排序到树中
- 随后的多维数组排序会产生意外的结果
- 数组排序基于纯javascript搜索文本匹配
- Javascript自定义数组按数组排序
- 使用字符串按属性错误对对象进行数组排序
- 多维数组排序
- JavaScript与PHP在数组排序中的对比
- Javascript-关联数组排序