首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery -使用数字键迭代对象

jQuery -使用数字键迭代对象
EN

Stack Overflow用户
提问于 2014-04-09 10:57:42
回答 2查看 1.9K关注 0票数 1

我有一个目标:

代码语言:javascript
复制
var myObj = { 5: "foo", 25: "bar" };

现在,我想像这样遍历这个对象:

代码语言:javascript
复制
$.each(myObj, function(key, value) {
    console.log(value); 
});

问题是,jQuery在数组中遍历了26次,而在24种情况下,值是“未定义的”(我调试了它--这是事实)。因此,在到达第五个值(即第一个值)之前,它遍历对象5次。

我不想将对象转换为数组,因为我想在处理数据后将数据存储回堆栈中。

这是一个jQuery,我的一个bug,还是如何解决这个问题?

附加信息:

下面是我的Chrome的DevTools屏幕截图,显示了运行时的对象。

sT.data.tasks包含与splitTicket相同的内容--只需要显示splitTicket,因为sT.data.tasks在$.splitTicket范围内丢失了。(也许这说明了问题的所在?)--另一件要注意的事情是键为"2517“的对象的”长度“--这是Google-Chrome Bug、javascript Bug还是正确的?

->注意,在当前断点上,tkey是0 (int),tval是未定义的(未定义),并且由于这段代码不会产生任何错误,它将遍历它2517次(不计算^^)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-09 11:01:38

一点都不是窃听器。看起来,jQuery只是把这个对象当作一个数组,并以正常的方式对它进行迭代,从0开始到最大键。

for..in循环遍历对象中的属性。

使用以下内容只需要2次:

代码语言:javascript
复制
for(key in myObj) {
    console.log(myObj[key]); 
};

在我看来,你的例子很好:

代码语言:javascript
复制
var myObj = { 5: "foo", 25: "bar" };
$.each(myObj, function(key, value) {
    console.log(value); 
});
foo
bar

查看jQuery $.each源代码,如果您的对象不是"arraylike“,它似乎使用for..in

我假设isArraylike为您的“真实”代码返回true ( false表示myObj)

jQuery $.each:

代码语言:javascript
复制
for ( i in obj ) {
    value = callback.call( obj[ i ], i, obj[ i ] );

    if ( value === false ) { break; }
}

jQuery isArraylike

代码语言:javascript
复制
function isArraylike(obj) {
    var length = obj.length,
        type = jQuery.type(obj);

    if (jQuery.isWindow(obj)) {
        return false;
    }

    if (obj.nodeType === 1 && length) {
        return true;
    }

    return type === "array" || type !== "function" && (length === 0 || typeof length === "number" && length > 0 && (length - 1) in obj);
}
票数 2
EN

Stack Overflow用户

发布于 2014-04-09 11:09:24

尝尝这个,

代码语言:javascript
复制
var myObj = { 5: "foo", 25: "bar" };
var i=0;
Object.keys( myObj ).forEach(function ( name, index ) {
    var value = myObj[name];
    console.log(++i);
    console.log(name); // the property name
    console.log(value); // the value of that property
    console.log(index); // the counter
});

演示

您的代码在我的side.but上迭代了两次,您也可以尝试使用这个示例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22960424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档