JavaScript 多维数组

IT技术 javascript jquery arrays
2021-03-13 04:21:19

这不是我要问的问题,但我意外地遇到了 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++;
});

错误消息:照片 [a] 未定义。我该怎么做呢?谢谢。

6个回答

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');
最好使用 photos[a] = {};
2021-04-23 04:21:19
你是对的,正确的方法是photos[a]={};而不是[],因为var x=[]; x['foo']='bar'; alert(x.length) //0你可以看到你没有填充数组,但实际上是对象属性。
2021-04-25 04:21:19
数组保存数字键,而不是字符串。
2021-05-02 04:21:19
这是有效的,但不正确。在这种情况下使用 Array 毫无意义,它只是让新手感到困惑。
2021-05-08 04:21:19
@Alsciende:该代码有效。数组在 JavaScript 中是一个对象,对象和哈希表在这种语言中是一回事。因此photos[0]["url"]正在为 分配一个url属性photos[0]
2021-05-09 04:21:19

你试图分配的东西photos[a]["url"]photos[a]["caption"]等等,但photos[a]还不存在。photos一开始是一个空数组,所以你必须先设置photos[a]一些东西。由于您想使用字符串键("url""caption"等),因此这应该是一个普通对象(相当于 php 关联数组的 javascript)(如果您的代码库允许,则为 Hash)。然后您可以使用文字对象构造来简化您的功能,并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(我曾经在我的例子后者)。

edit2:无论如何, usingthis有点奇怪,因为传递给的回调函数each接收一个参数。不妨使用这个参数(重命名)。

我不太了解 jQuery。我会使用你的建议。
2021-04-25 04:21:19
唯一的问题this是它没有css方法。它必须首先包装在一个 jQuery 对象中。
2021-05-06 04:21:19
var photos = [];
var imgs = document.getElementById("photos").getElementsByTagName("img");
for(var i=0;i<imgs.length;i++){
    photos.push({
        src:imgs[i].src,
        alt:imgs[i].alt,
        background:imgs[i].style.backgroundColor
    });
}

这应该给你一些大致相当于 PHP 中的东西(我编造了假装数据):

Array(
    [0] => Array(
        "src" => "logo.png",
        "alt" => "My Logo!",
        "background" => "#ffffff"
    )
)

我希望这有帮助!

感谢您使之更具可读性。
2021-04-23 04:21:19
+1 用于在可能的情况下使用纯 js 进行编码
2021-05-20 04:21:19

当我阅读此线程时,我试图了解多维关联数组。不清楚所以我一直在研究,这就是我想出的:

var images = new Array;
images['logo'] = { 'src': 'http://example.com/image1.png', 'caption': 'this is the logo', 'background':  '#000'};
images['background'] = { 'src': 'http://example.com/image2.png', 'caption': 'this is the background', 'background':  '#FFF'};
alert(images['logo']['src']); /* output: http://example.com/image1.png */
alert(images['background']['caption']); /* output: this is the background */

希望这可以帮助!

多维数组在这些结构中:

var photos = new Array();
photos[0] = new Array();

将其用作:

photos[0][0] = this.src;

更多关于 JS 数组在这里