gpt4 book ai didi

javascript - 使用 jQuery .each 迭代关联数组

转载 作者:可可西里 更新时间:2023-11-01 01:20:55 24 4
gpt4 key购买 nike

可能对这个问题影响最大的因素是我现在非常困。

我有一个数组,我初始化它:

var cells = [];

然后我将一些值放入其中(jQuery 对象),例如:

$("td").each(function () {
var td = $(this);
cells[td.attr("id")] = td;
});

现在是我的问题。这段代码:

$(cells).each(function (i) {
console.log(this) // firebug console
});

绝对没有记录。当我通过替换将关联数组更改为普通的数字索引 1 时

cells[td.attr("id")] = td;

cells.push(td);

它工作正常。

此外,当我尝试使用 for..in 循环进行迭代时,它会按预期工作。

for (var cell in cells) {
console.log(cells[cell]);
}

这意味着 jQuery 的 .each 方法不接受关联数组还是我做错了什么?

最佳答案

JavaScript 没有关联数组。它有数组,也有对象,而数组恰好是对象。当您这样做时:

var a = [];
a['foo'] = 'bar';

..你实际上是在做同样的事情:

var a = [];
a.foo = 'bar';
// ^--- property of object 'a'

也就是说,您实际上是在对象 a 中添加一个名为foo属性,< em>不向数组 a 添加一个元素

来自 jQuery.each() 的文档:

Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties.

自从您创建了一个Array ([]) 之后,jQuery 会查看它的length 属性,并且由于您还没有添加任何元素到数组(只有对象的 properties,记住)它的 length 仍然是零,所以 jQuery(正确地)什么都不做。

正如其他人所指出的,您想要做的是创建一个对象,例如使用var 细胞 = {};。由于非 Array 对象没有 length 属性(无论如何默认情况下都没有),jQuery 会知道您真的想遍历它的 properties 而不是像在数组。

关于javascript - 使用 jQuery .each 迭代关联数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7671727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com