有没有一种方法可以检查多维数组中的第一个数组项以查看值是否已更改?

时间:2019-04-23 17:51:16

标签: javascript

我有一个多维数组。特别是2D。第一个数组是我要存储的页码。第二个数组是页面的图层名称。我的问题是我在每个页码之前创建一个标题。我试图遍历并打印标题,然后是第一页,然后是第一组图层。然后是第二个标题,第二个页面,然后是第二组图层。我的代码是打印标题,然后打印所有页面和层。

我尝试遍历数组,但是不确定我需要在哪里放置嵌套循环。我一直在尝试for循环和print语句的不同放置。我得到的最接近的是标题,并且所有下面的层都打印在标题下。

var theCount = 0;
for (var z = 0; z < isolatedPages.length; z++) {
    if (theCount != isolatedPages.length) {
        theCount++;
        console.println("header bookmark loop V" + theCount);
        for (var i = 0; i < hypertextArray.length; i++) {
            var layerNamesArray = hypertextArray[i];
            for (var x = 0; x < layerNamesArray.length; x++) {
                if (layerNamesArray.length > 1) {
                    console.println("layerNamesArray[" + i + "][" + x + "] = " + layerNamesArray[x]);
                }
            }
        }
    }
}

这是控制台中当前代码的输出:

header bookmark loop V1
layerNamesArray[1][0] = V1 - 347 (Dk Green)
layerNamesArray[1][1] = V1 - 346 (Med Green)
layerNamesArray[1][2] = V1 - 258 (Dk Purple)
layerNamesArray[3][0] = V2 - 346 (Med Green)
layerNamesArray[3][1] = V2 - 258 (Dk Purple)
layerNamesArray[3][2] = V2 - 190 (Dk Pink)
layerNamesArray[3][3] = V2 - 021 (Orange)
layerNamesArray[3][4] = V2 - 305 (Lt Blue)
header bookmark loop V2
layerNamesArray[1][0] = V1 - 347 (Dk Green)
layerNamesArray[1][1] = V1 - 346 (Med Green)
layerNamesArray[1][2] = V1 - 258 (Dk Purple)
layerNamesArray[3][0] = V2 - 346 (Med Green)
layerNamesArray[3][1] = V2 - 258 (Dk Purple)
layerNamesArray[3][2] = V2 - 190 (Dk Pink)
layerNamesArray[3][3] = V2 - 021 (Orange)
layerNamesArray[3][4] = V2 - 305 (Lt Blue)

这就是我想要的:

header bookmark loop V1
layerNamesArray[1][0] = V1 - 347 (Dk Green)
layerNamesArray[1][1] = V1 - 346 (Med Green)
layerNamesArray[1][2] = V1 - 258 (Dk Purple)
header bookmark loop V2
layerNamesArray[3][0] = V2 - 346 (Med Green)
layerNamesArray[3][1] = V2 - 258 (Dk Purple)
layerNamesArray[3][2] = V2 - 190 (Dk Pink)
layerNamesArray[3][3] = V2 - 021 (Orange)
layerNamesArray[3][4] = V2 - 305 (Lt Blue)

2 个答案:

答案 0 :(得分:0)

尝试一下:

for (var i = 0; i < hypertextArray.length; i++) {
    console.log("header bookmark loop V" + i);
            var layerNamesArray = hypertextArray[i];
            for (var x = 0; x < layerNamesArray.length; x++) {
                if (layerNamesArray.length > 1) {
                    console.println("layerNamesArray[" + i + "][" + x + "] = " + layerNamesArray[x]);
                }
            }
        }

并删除外部第一个循环。

答案 1 :(得分:0)

不应存在外部循环。

相反,在hyperTextArray的循环内打印标题。 还要使循环计数器以两个为单位递增,因为显然您将页码存储在偶数索引中,并将层数组存储在奇数索引中。

内部if是无用的,因为for仅在该if条件为真时才会迭代。

您输出文本“ layerNamesArray [] []”,但实际上应该是“ hypertextArray [] []”以保持一致。

因此,更正后的代码将是:

for (var i = 0; i < hypertextArray.length; i+=2) {
    console.println("header bookmark loop V" + hypertextArray[i]);
    var layerNamesArray = hypertextArray[i+1];
    for (var x = 0; x < layerNamesArray.length; x++) {
        console.println("hypertextArray["+i+"]["+x+"] = "+layerNamesArray[x]);
    }
}

在更现代的编码(如果您使用的平台上受支持)中,它将是:

for (let i = 0; i < hypertextArray.length; i+=2) {
    console.println(`header bookmark loop V${hypertextArray[i]}`);
    for (const layer of hypertextArray[i+1]) {
        console.println(`hypertextArray[${i}][${x}] = ${layer}`);
    }
}

或者,您可以一个一个地循环,并检测该项目是否为数组:

for (const hypertextElem of hypertextArray) {
    if (Array.isArray(hypertextElem)) {
        for (const layer of hypertextElem) {
            console.println(`hypertextArray[${i}][${x}] = ${layer}`);
        }
    } else {
        console.println(`header bookmark loop V${hypertextElem}`);
    }
}