如何按照定义的顺序迭代以数字命名的对象属性
How to iterate over numerically named object properties in defined order?
理论上,对象属性的迭代顺序是不能保证的。在实践中,它有一个事实上的标准。IE<9, Firefox, Safari总是按照定义的顺序迭代。Opera, IE9, Chrome按定义顺序迭代字符串键。数字键被排序并排在字符串键之前。
我有一个对象填充数组,所有键都是数字。我如何以定义的顺序迭代这些对象属性。在ie9和chrome中,数字键总是在迭代之前排序。
以任何有保证的方式做到这一点的唯一方法是将所有键放入数组中,对数组进行排序,然后使用该数组进行迭代。
下面是一些伪代码:
var obj = {}; // object with lots of properties
var keys = [];
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
keys.push(i);
}
}
// may have to craft a custom sort function to get the right order
keys.sort();
for (i = 0; i < keys.length; i++) {
// operate on obj[keys[i]]
}
EDIT:基于新的注释,现在听起来OP想要使用内部数组中的第3个元素作为排序键对数组的数组进行排序。所以,如果你有:
[[52668,'52668','Orange, Julian','YES'], [61230,'61230','Apple','YES'], [42689,'42689','Banana','YES']]
他想按水果名称排序(内部数组中的第三项)
可以这样做:
var data = [[52668,'52668','Orange, Julian','YES'], [61230,'61230','Apple','YES'], [42689,'42689','Banana','YES']];
data.sort(function(a, b) {
return(a[2].localeCompare(b[2]));
});
相关文章:
- 如何从对象的原型方法访问JavaScript对象属性
- 如何将数组项添加到对象属性中
- 设置嵌套对象属性的更好方法
- JavaScript管理具有重复属性名称的对象属性
- 如何使用element.myobj.prop等具有对象属性的元素
- 如何使用(this)访问Angular 2 http rxjs catch函数中的对象属性
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- 如何在AngularJS工厂中正确声明对象属性
- 如何使用object.assign()从其他对象引用基本对象属性
- 使用XPath样式访问Javascript JSON对象属性
- 将javascript对象(属性+值)合并到一个对象中
- 数组:使对象属性成为数组键
- 无法从JavaScript中的函数调用对象属性
- Google Closure Advanced |无法识别对象属性|动态属性
- Javascript从匿名函数访问外部对象属性
- 从函数更改对象属性
- 如何从字符串变量访问对象属性
- 从嵌套对象属性中获取排除某个值的最高值
- 在Aurelia computeds中,当设置依赖关系时,如何声明对对象属性的依赖关系
- 传递数量不确定的可能嵌套的对象属性