Prz*_*mek 16 javascript jquery loops
可能这个问题最重要的因素是我现在非常困倦.
我有一个数组,我发起:
var cells = [];
Run Code Online (Sandbox Code Playgroud)
然后我在其中放入一些值(jQuery对象),例如:
$("td").each(function () {
var td = $(this);
cells[td.attr("id")] = td;
});
Run Code Online (Sandbox Code Playgroud)
现在我的问题.这段代码:
$(cells).each(function (i) {
console.log(this) // firebug console
});
Run Code Online (Sandbox Code Playgroud)
绝对没有任何记录.当我通过替换将关联数组更改为正常数字索引1
cells[td.attr("id")] = td;
Run Code Online (Sandbox Code Playgroud)
同
cells.push(td);
Run Code Online (Sandbox Code Playgroud)
它工作正常.
此外,当我尝试使用for..in循环迭代时,它按预期工作.
for (var cell in cells) {
console.log(cells[cell]);
}
Run Code Online (Sandbox Code Playgroud)
Doeas意味着jQuery的.each方法不接受关联数组或者我做错了什么?
Jor*_*ing 29
JavaScript没有关联数组.它有Arrays,它有Objects,而数组恰好是对象.当你这样做:
var a = [];
a['foo'] = 'bar';
Run Code Online (Sandbox Code Playgroud)
..你实际上做的相当于:
var a = [];
a.foo = 'bar';
// ^--- property of object 'a'
Run Code Online (Sandbox Code Playgroud)
也就是说你实际上添加一个属性叫foo的对象 a,不添加元素的数组 a.
从以下文档jQuery.each():
阵列和以阵列状物体
length属性(如功能的arguments对象)由数字索引重复,从0到length-1.其他对象通过其命名属性进行迭代.
既然你创建了一个Array([])的jQuery看它的length属性,因为你还没有添加任何元素的数组(唯一性的对象,记住)它length仍然是零,因此jQuery的(正确的)什么都不做.
正如其他人所指出的那样,你要做的是使用例如创建一个Object var cells = {};.由于非Array对象没有length属性(不管是默认情况下),jQuery会知道你真的想要迭代它的属性而不是数组中的数字索引.
您似乎认为Javascript的数组是关联的,但事实并非如此.您可能正在寻找对象(或哈希):
var cells = {}; // Not [].
$("td").each(function() {
var td = $(this);
cells[td.attr("id")] = td;
});
$.each(cells, function() {
console.log(this); // This should work as expected.
});
Run Code Online (Sandbox Code Playgroud)