簡體   English   中英

如何檢查javaScript中多維數組中兩個元素是否並排

[英]How to check if two elements are side by side in multidimentional array in javaScript

我將直接指出問題。.因此,我創建了一個多維數組,我將其像這樣:

var arr = [];

for (var i = 0; i < 10; i++) {

    var sArr = [];

    for (var a = 0; a < 10; a++) {

        cell = Object.create(cellObj)

        sArr.push(cell);

    }

    arr.push(sArr);

}

關於cellObj,我是這樣創建的:

var cellObj = {

state: 0,
img: ""

};

現在我已完成所有設置,我將在多維數組中生成兩個圖像,如下所示:

//the array imgs contain two images

for (var l = 0; l < imgs.length; l++) {

    var x = Math.floor(Math.random() * arr.length);

    var y = Math.floor(Math.random() * arr[x].length);

    //here is a test to make sure that the two images are in two separate cells

    if (arr[x][y].state === 0) {

        arr[x][y].state = 3;

        arr[x][y].img = imgs[l];

    }
    else
    {
        l--;
    }

}

兩個圖像可以在同一行或同一列中,並且它們之間有一個空單元格,但是我不希望它們在水平或垂直方向上並排放置。

希望大家都度過愉快的一天,謝謝。

實現所需目標的最簡單方法是預先消除這些選擇。 在下面的方法中,我將創建一個包含數組中所有位置的平面數組(為清楚起見,我將arr重命名為arrayOfImages )並將其命名為coordLookup 放置圖像后,將在filter語句中從coordLookup中刪除垂直和水平位置的圖像。 我已經增加了測試圖像的數量,以表明它保持了該間距-請注意,如果您嘗試放置的圖像數量超出了數組可容納的空間,它將開始失敗,因此請確保為這種情況。

(要查看實際情況,請打開控制台並運行代碼段,它應將完成的數組顯示為表格。)

 var cellObj = { state: 0, img: "" }; var arrayOfImages = []; for (var i = 0; i < 10; i++) { var sArr = []; for (var a = 0; a < 10; a++) { cell = Object.create(cellObj) sArr.push(cell); } arrayOfImages.push(sArr); } var coordLookup = [], i = 10, j = 10 //create coordinate lookup while(--i > -1){ j = 10 while(--j > -1){ coordLookup.push([i,j]) } } var imgs = ['image1.jpg', 'image2.jpg', 'image1.jpg', 'image2.jpg', 'image1.jpg', 'image2.jpg', 'image1.jpg', 'image2.jpg', 'image1.jpg', 'image2.jpg', 'image1.jpg', 'image2.jpg'] for (var l = 0; l < imgs.length; l++) { let pairIndex = Math.floor(Math.random() * coordLookup.length), pair = coordLookup[pairIndex], x = pair[0], y = pair[1] //insert image arrayOfImages[x][y].state = 3; arrayOfImages[x][y].img = imgs[l] //disable horizontal and vertical neighbor cells const prevX = x - 1, nextX = x + 1, prevY = y - 1, nextY = y + 1 coordLookup = coordLookup.filter(coordpair => { const _x = coordpair[0], _y = coordpair[1], isMatch = (_y == y && _x >= prevX && _x <= nextX) || (_x == x && _y >= prevY && _y <= nextY) return !isMatch }) } //display results console.table(arrayOfImages.map(row => row.map(cell => JSON.stringify(cell)))) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM