I have created a chess board and I didn't like the look of my switch case statement. I think there must be a way to compact it, but I cant find one. Maybe some of you can help me.
Extra explanations, the chess pieces are in a 2 dimensional array (arr2):
[
["R", "N", "B", "Q", "K", "B", "N", "R"],
["P", "P", "P", "P", "P", "P", "P", "P"],
["0", "0", "0", "0", "0", "0", "0", "0"],
["0", "0", "0", "0", "0", "0", "0", "0"],
["0", "0", "0", "0", "0", "0", "0", "0"],
["0", "0", "0", "0", "0", "0", "0", "0"],
["p", "p", "p", "p", "p", "p", "p", "p"],
["r", "n", "b", "q", "k", "b", "n", "r"]
];
And every field of the chess board has it's own id form "00" to "77" where first digit is the row and second is the column.
The innerHTML code is just the unicode for the chess pieces as seen here: https://en.wikipedia.org/wiki/Chess_symbols_in_Unicode#Unicode_code_points_and_HTML
for (let r = 0; r < arr2.length; r++) {
for (let c = 0; c < arr2.length; c++) {
div = document.getElementById(r + "" + c)
switch (arr2[r][c]){
//black piece
case 'k':
div.innerHTML = "♚";
break;
case 'q':
div.innerHTML = "♛";
break;
case 'r':
div.innerHTML = "♜";
break;
case 'b':
div.innerHTML = "♝";
break;
case 'n':
div.innerHTML = "♞";
break;
case 'p':
div.innerHTML = "♟";
break;
//white piecec
case 'K':
div.innerHTML = "♔";
break;
case 'Q':
div.innerHTML = "♕";
break;
case 'R':
div.innerHTML = "♖";
break;
case 'B':
div.innerHTML = "♗";
break;
case 'N':
div.innerHTML = "♘";
break;
case 'P':
div.innerHTML = "♙";
break;
}
}
}
Mapmapping (for instance)"k"to"♚", etc. Thenvar html = theObject[arr2[r][c]]; if (html) { div.innerHTML = html; }(or with map:var html = theMap.get(arr2[r][c]); if (html) { div.innerHTML = html; }.var pieces = { /* Black pieces */ 'k': "♚", 'q': "♛", 'r': "♜", 'b': "♝", 'n': "♞", 'p': "♟", /* whitepieces */ 'K': "♔", 'Q': "♕", 'R': "♖", 'B': "♗", 'N': "♘", 'P': "♙" }; for (let r = 0; r < arr2.length; r++) { for (let c = 0; c < arr2.length; c++) { div = document.getElementById(r + "" + c); div.innerHTML = pieces[arr2[r][c]]; }}}