【问题标题】:.each not working on an Array. But .isArray returns true?.each 不适用于数组。但是 .isArray 返回 true 吗?
【发布时间】:2010-11-24 19:03:33
【问题描述】:

我创建了一个包含一些项目的对象,其中一个包含多个对象,每个对象都包含一个数组。这是它的结构。

$.myVar = {
    cp : "",
    ps : {
        m1 : ["001", "002", "003"],
        m2 : ["002", "004"]
    }
};

我的脚本不断崩溃,说 $.myVar.ps["m1"] 每个都没有方法。

当我进入 Chrome 的控制台进行调查时,我运行以下命令并获得显示的输出。

$.myVar.ps["m1"]
["001", "002", "003"]
$.myVar.ps["m1"].each( function (i, p) {alert(i)})
TypeError: Object 001,002,003 has no method 'each'

另外,如果我运行以下,它证明 m1 是一个数组。

$.isArray($.myVar.ps["m1"])
true

所以它似乎同意 m1 是一个数组,但它拒绝这样对待它。知道我做错了什么吗?

【问题讨论】:

    标签: javascript jquery arrays object


    【解决方案1】:

    each 不是原生的Array 方法;它是 jQuery 对象的方法,即由 $ 函数创建的对象。你可以这样做

    $($.myVar.ps.m1).each(function (i, el) { /* ... */ });
    

    (不推荐,因为它在将数组包装在$(...) 中时会创建一个不必要的jQuery 对象)或者您可以只使用$.each

    $.each($.myVar.ps.m1, function (i, el) { /* ... */ });
    

    如果您使用现代浏览器(IE >=9)或使用es5-shim,最推荐的路线是使用标准的Array.prototype.forEach 方法:

    $.myVar.ps.m1.forEach(function (el, i) { /* ... */ });
    

    注意不同的参数顺序(IMO 更好,因为如果不需要它,您可以省略索引)。

    【讨论】:

      【解决方案2】:

      .each 仅为 jQuery 对象定义。对于纯 Javascript 数组,use the "static method" $.each

      $.each($.myVar.ps["m1"], function(i,p) { alert(i); });
      

      【讨论】:

        【解决方案3】:

        each 不是 javascript 中数组的方法。 试试:

        $($.myVar.ps["m1"]).each
        

        【讨论】:

        • 不要构造无效的jQuery对象;请改用$.each()
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-04
        • 1970-01-01
        • 2016-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多