JavaScript 多维数组
JavaScript 多维数组
这个问题已经有了答案:
这不是我要问的问题,但我在JavaScript数组方面出了意外问题。我来自PHP背景,看了几个网站后,我还是毫不明白。
我试图创建一个多维数组。
var photos = new Array; var a = 0; $("#photos img").each(function(i) { photos[a]["url"] = this.src; photos[a]["caption"] = this.alt; photos[a]["background"] = this.css('background-color'); a++; });
错误消息:photos [a] 未定义。我该怎么办?谢谢。
admin 更改状态以发布 2023年5月21日
你想要将一些东西赋给photos[a]["url"]
、photos[a]["caption"]
等等,但是photos[a]
不存在。一开始,photos
是一个空数组,所以你必须先将photos[a]
设置为某个东西。既然你想要使用字符串键("url"
、"caption"
等等),那么这个东西应该是一个简单对象(javascript和php关联数组的等效物)(或者如果你的代码允许,可以使用哈希表)。然后你可以使用一个字面对象构造来简化你的函数,并且使用Array#push
来摆脱不必要的a
:
var photos = []; $("#photos img").each(function(img) { photos.push({ url: img.src, caption: img.alt, background: img.style.backgroundColor }); });
此外,请确保this
实际上是你的img
元素。在某些情况下,each
的实现会将this
设置为全局对象。
编辑:好的,看起来jQuery.each
自动将this
设置为迭代的元素,但不会将其包装在jQuery中,所以你必须将this
包装在$()
中,或者使用纯DOM(我在我的示例中使用了后者)。
编辑2:无论如何,使用this
都有点奇怪,因为传递给each
的回调函数接收一个参数。不妨使用这个参数(并进行重命名)。
JavaScript没有多维数组,但是可以使用类似的数组嵌套数组的方式。
你可以尝试以下操作:
var photos = []; var a = 0; $("#photos img").each(function(i) { photos[a] = []; photos[a]["url"] = this.src; photos[a]["caption"] = this.alt; photos[a]["background"] = this.css('background-color'); a++; });
请注意,你可以使用new Array()
代替[]
,但是后者通常更可取。还要注意,在第一行中,你缺少new Array()
的括号。
更新:根据下面的评论,上面的例子其实不需要使用数组嵌套数组。使用数组嵌套对象会更合适。代码在这种语言中仍然有效,但是以下代码会更好:
photos[a] = {}; photos[a]["url"] = this.src; photos[a]["caption"] = this.alt; photos[a]["background"] = this.css('background-color');