JavaScript 多维数组

12 浏览
0 Comments

JavaScript 多维数组

这个问题已经有了答案:

在JavaScript/jquery中创建一个多维空数组是可能的吗?

如何在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日
0
0 Comments

你想要将一些东西赋给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的回调函数接收一个参数。不妨使用这个参数(并进行重命名)。

0
0 Comments

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');

0