2017-09-04 111 views
1

我想检查数据数组中的元素,如果它包含表中的Month和Number,则显示为“O”。所以对于“Jan-1”,Array1[0][0]应显示为“O”,但下面的代码不起作用。有人能帮我吗?JavaScript将数据存储在二维数组中

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 
+0

这两者是错'数组1 [Z] [S] = “O”;数组1 [Z] [S] = “X”;' – brk

回答

1

您应该遍历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(" | ")); 
 
});

1

分析您代码:

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"; 
     } 
0

你可以采取一个对象与给定的数据和迭代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; }