我创建了一个包含一些项目的对象,包括一个包含多个对象的对象,每个对象都包含一个数组。以下是它的结构。
$.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是一个数组,但它拒绝对它进行处理。知道我做错了吗?
答案 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