如何按数组值排序javascript对象
How would I sort a javascript object by array values
我曾经有一个数组的数组,并使用排序函数来获得正确的顺序,如:
var sampleArr = [
[272, 'Some Title', 1, 1],
[281, 'Some Other Title', 1, 2],
[287, 'Another Title', 2, 1]
];
sampleArr.sort(sortCourses);
function sortCourses(a, b){
if (a[3] == b[3]) {
return (a[2] - b[2]);
} else {
return (a[3] - b[3]);
}
}
这是期望的结果,但是我们已经将id更改为属性,并将属性值设置为数组,如:
var sampleObj = {
272: ['Some Title', 1, 1],
281: ['Some Other Title', 1, 2],
287: ['Some Other Title 2', 2, 1]
};
这使得我们的生活更容易查找该id,但我不确定如何排序它。
有谁能告诉我最好的方法吗?我是否需要将其转换回具有函数的数组,然后运行相同的排序函数?如果是这样,如何将sampleObj转换回原始格式?
谢谢。
目前对象属性的迭代留给了浏览器。并不是所有的浏览器都对其可迭代属性进行排序,因此将此行为作为默认值是不安全的。
另一个问题可以解释它:元素顺序在"for(…in…)"循环
如果你想获得这样的东西,你必须依靠非标准的Object.keys()
方法,对结果数组进行排序,然后使用它访问属性。
或者,以另一种更可移植的方式,您必须创建一个函数来提取数组中所有对象的属性,对该数组进行排序并迭代以提取每个对象属性。
我会简单地将其转换回原始格式。这很简单:
var array = Object.keys(sampleObj).map(function(key) {
return [Number(key)].concat(sampleObj[key])
})
Object.keys()是一个ECMAScript 5函数,所以这段代码不能在IE6-8中工作,但它基本上可以在所有其他浏览器中工作。
相关文章:
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 循环遍历以数组为值的Javascript对象
- 从ajax请求中获取javascript对象
- 如何从对象的原型方法访问JavaScript对象属性
- 将XML转换为普通的旧JavaScript对象
- 通过引用传递JavaScript对象
- javascript对象操作:根据指定条件选择属性
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 如何在异步函数中使用javascript对象
- 临时Javascript对象
- 如何在ASP中为用户控件添加Javascript对象网
- 使用数组向下搜索Javascript对象
- Rails将JavaScript对象存储到Model的有效方式
- JavaScript对象不是从原型链继承的
- 如何创建具有默认值的JavaScript对象字段?(AngularJS模型相关)
- SetInterval在javascript对象中表现怪异
- Javascript 对象和 this 关键字
- 如何在不知道关键字的情况下访问javascript对象值
- 在 JavaScript 对象中设置要使用的运算符的属性
- 如何搜索JavaScript对象并更改值