簡體   English   中英

JavaScript將數據存儲在二維數組中

[英]JavaScript Storing Data in 2-D Array

我想檢查數據數組中的元素,如果它在表中包含該月份和數字,則顯示為“ O”。 因此,對於“ Jan-1”, Array1[0][0]應該顯示為“ O”,但下面的代碼不起作用。 有人能幫我嗎?

var Data = ["Jan-1", "Feb-4", "Apr-5"];
var Month= ["Jan", "Feb", "Mar", "Apr", "May"];
var Number = ["1", "2", "3", "4", "5"];
var Array1 = [[]];

for (var k = 0; k < Data.length; k++) {
    var split = Data[k].split("-");
    for (var z = 0; z < Month.length; z++) {
        for (var s = 0; s < Number.length; s++) {
            if (Month[z] == split[0] && period[s] == split[1]) {
                Array1[z][s] = "O";
            } else {
                Array1[z][s] = "X";
            }             
        }
    }
}
number/month |  Jan  |  Feb  |  Mar  |  Apr  | May
------------------------------------------------------
     1       |   O   |   X   |   X   |   X   |   X  
     2       |   X   |   X   |   X   |   X   |   X  
     3       |   X   |   X   |   X   |   X   |   X  
     4       |   X   |   O   |   X   |   X   |   X  
     5       |   X   |   X   |   X   |   O   |   X  

您應該遍歷NumberMonth數組,並每次檢查是否Month[j] + "-" + Number[i]Data數組中:

 var Data = ["Jan-1", "Feb-4", "Apr-5"]; var Month = ["Jan", "Feb", "Mar", "Apr", "May"]; var Number = ["1", "2", "3", "4", "5"]; var result = []; for (var i = 0; i < Number.length; i++) { // foreach number result[i] = []; // create a row for this current number for (var j = 0; j <Month.length; j++) { // for each month if (Data.indexOf(Month[j] + "-" + Number[i]) !== -1) { // check if the current combination (currentMonth-currentNumber) is in the Data array result[i][j] = "O"; } else { result[i][j] = "X"; } } } result.forEach(function(row) { console.log(row.join(" | ")); }); 

分析您的代碼:

var Data = ["Jan-1", "Feb-4", "Apr-5"];
var Month= ["Jan", "Feb", "Mar", "Apr", "May"];
var Number = ["1", "2", "3", "4", "5"];
var Array1 = [  ["X","X","X","X","X"],  ["X","X","X","X","X"],  "X","X","X","X","X"],  ["X","X","X","X","X"],  ["X","X","X","X","X"]]; //Initialise all elements to "X" by default. We shall change only those indexes that match.

for (var k = 0; k < Data.length; k++) {
    var split = Data[k].split("-");
    for (var z = 0; z < Month.length; z++) {
        for (var s = 0; s < Number.length; s++) {
            if (Month[z] == split[0] && Number[s] == split[1]) {
                Array1[z][s] = "O";
            } else {
                //Array1[z][s] = "X"; Do not change here as the loop will go over the entire array once for each data. Hence previous matches would get lost!!
            }             
        }
    }
}

最后, console.table(Array1); 打印值。

注釋:初始化時,您將行聲明為月,將列聲明為天,但預期輸出相反。 因此,要生成預期的輸出,請在定義值時打印橫向形式或更改:

if (Month[z] == split[0] && Number[s] == split[1]) {
            Array1[s][z] = "O";
        }

您可以使用具有給定數據的對象,並迭代monthnumber以返回帶有'O''X'信息的新數組。

 var data = ["Jan-1", "Feb-4", "Apr-5"], month = ["Jan", "Feb", "Mar", "Apr", "May"], number = ["1", "2", "3", "4", "5"], result = [], hash = Object.create(null); data.forEach(function(s) { var [m, d] = s.split('-'); hash[m] = hash[m] || {}; hash[m][d] = true; }); result = month.map(function (m, z) { return number.map(function (s) { return (hash[m] || {})[s] ? 'O' : 'X'; }); }); console.log(result); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

暫無
暫無

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

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