时间:2010-11-24 19:03:34

标签: javascript jquery arrays object

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

$.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是一个数组,但它拒绝对它进行处理。知道我做错了吗?

3 个答案:

答案 0 :(得分:19)

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更好,因为如果你不需要它就可以省略索引)。

答案 1 :(得分:7)

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

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

答案 2 :(得分:-2)

每个都不是javascript中数组的方法。 尝试:

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