【问题标题】:Javascript - Object, for loop starting at 2Javascript - 对象,从 2 开始的 for 循环
【发布时间】:2013-04-04 09:12:02
【问题描述】:

我有这样的对象。

foo = {
    0 : {
        'bar' : 'baz',
        'qux' : 'quux',
        'this' : { 'hello' : 'yes' } // this is the object I want to extract
    }
    1 : {
        'bar' : 'baz',
        'qux' : 'quux',
        'this' : { 'hello' : 'yes' } // extract
    }
    2 : {
        'bar' : 'baz',
        'qux' : 'quux',
        'this' : { 'hello' : 'yes' }, // extract
        'that' : { 'hello' : 'no' } // extract
    }
}

使用这样的 for 循环,我可以遍历每个对象:

for(var i in foo){
  ...
}

问题是我只想从第三个和更大的子对象中提取数据,而不是每个对象中的 ('this')

【问题讨论】:

  • 对象属性没有排序。请改用数组。
  • 对象是无序的。实际上并没有“第一”或“第二”键值对的概念。您是否只是想获取碰巧具有对象值的所有键?
  • 如果我一直都知道他们会按这个顺序来?
  • 使用这种格式和常规的for循环:foo = [{},{},{}]
  • @Philip:没有没有顺序。这就是它们的显示方式。

标签: javascript object for-loop


【解决方案1】:

ECMAscript 中没有指定对象键 的顺序。如果你有索引键名,你真的应该使用 Javascript 数组

如果你需要一个普通的Object,你可能想在Array.prototype.forEach.sort()旁边使用Object.keys(),比如

Object.keys( foo ).sort().forEach(function( i ) {
});

如果你不能依赖 ES5,你别无选择,只能手动完成。

var keys = [ ];

for(var key in foo) {
    if( foo.hasOwnProperty( key ) ) {
        keys.push( key );
    }
}

keys.sort();

for(var i = 0, len = keys.length; i < len; i++) {
}

然而,你真的应该首先使用一个数组,这样你就可以跳过这些肮脏的工作。

【讨论】:

  • 问题是IE不能使用Object.keys。
  • 感谢您的解决方案,我想我会改为制作一个数组。! =)
  • var cnt = 1,cur;while (cur = foo[++cnt]) {...} 也不能工作,尽管使用对象仍然没有多大意义
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
  • 2013-06-22
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
相关资源
最近更新 更多