Javascript 遍历对象哈希表

Javascript 遍历对象哈希表,javascript,hashtable,Javascript,Hashtable,我试图使用哈希表,以便选择存储在数组/对象中的特定对象。但是,我在循环对象时遇到问题 var pins= {}; pins[6] = '6'; pins[7] = '7'; pins[8] = '8'; $('#result3').append('<div>Size: ' + Object.size(pins) + '</div>'); for(var i = 0; i < Object.size(pins); i++) { $('#result3').a

我试图使用哈希表,以便选择存储在数组/对象中的特定对象。但是,我在循环对象时遇到问题

var pins= {};
pins[6] = '6';
pins[7] = '7';
pins[8] = '8';

$('#result3').append('<div>Size: ' + Object.size(pins) + '</div>');
for(var i = 0; i < Object.size(pins); i++) {
    $('#result3').append('<div>' + pins[i] + '</div>');
}
上面的console.log返回undefined,如果改为console.logmarker,则会得到marker.listing_id的值。很抱歉,我弄糊涂了

我设法使它与$.eachmarkers、functioni、marker{}一起工作;但是为什么上面的for..不起作用呢?

不要使用fori=0;i引脚从6到8开始,但循环从0到3循环对象的长度。您需要从6循环到6+对象的大小。大概是这样的:

for(var i = 6, len = 6 + Object.size(pins); i < len; i++) {
  $('#result3').append('<div>' + pins[i] + '</div>');
}
或者像这样,这就是我喜欢的:

for( var i = 5; pin = pins[++i]; ) {
  $('#result3').append('<div>' + pin + '</div>');
}

因为您使用的是jQuery:

jQuery.each(pins, function (name, value) {
    $('#result3').append('<div>' + name + "=" + value + '</div>');
});
试试这个:

for (var pin in pins) {
    $('#result3').append('<div>' + pin + '</div>');
}

这将迭代任何对象中所有字段的id

以获取。。。in循环是子循环optimum@Raynos不,他们不是。但是,缺少hasOwnProperty是。@c69表示。。。in仍然是次优的,因为它的性能不如Object.keys。hasOwnProperty是一个昂贵的调用,您在索引6、7和8处添加成员,但从0迭代到2。更好的策略是从0迭代到length-1,并在尝试使用之前测试成员是否存在。您将数组与对象混淆。@c69数组是对象,;-OP的问题是试图访问不存在的属性。@RobG是的,这就是为什么我对你的评论投了更高的票,但他试图访问不存在的属性正是因为他不理解自己在做什么。如果我将pin[6]=“6”改为pin[6]=一个对象,并且我想循环访问他们所有的属性id,会发生什么?更新了原始帖子。如果你在尝试使用该成员删除不存在的成员之前添加if pin.hasOwnPropertyi…会更好。我使用了你的方法,它按照我想要的方式工作,但我不明白为什么使用for..in不能按预期工作。。。更新了原始帖子…因为您使用中的…来计算项目的数量,而不是找出它们的名称。一旦您发现有三个项目,您将查看名为0、1和2的项目,但这些项目被称为6、7和8。值变量是在使用后创建的。
jQuery.each(pins, function (name, value) {
    $('#result3').append('<div>' + name + "=" + value + '</div>');
});
for (var pin in pins) {
    $('#result3').append('<div>' + pin + '</div>');
}
function iterate(obj){
    var keys = Object.keys(obj);
    for(i in keys){
        doSomething(obj[keys[i]].id);
    }
}