我有一个值为true和false的数组。我想检查数组的值是否为真绘制'*'。每行应向左移动1个位置。
Expected result ->
'*****
*****
*****
*****
*****'
我尝试过这种方式。
let points = [
[true, false, true, false, true, false, true, false, true, false],
[false, true, false, true, false, true, false, true, false, true],
[true, false, true, false, true, false, true, false, true, false],
[false, true, false, true, false, true, false, true, false, true],
[true, false, true, false, true, false, true, false, true, false]
];
let m = 10;
let n = 5;
let board = "";
let space = '\xa0';
for(let i = 0; i < points.length; ++i) {
for(let j = 0; j < points[i].length; ++j) {
if(points[i][j]) {
for (let y = 0; y < points[i]; y++) {
if(y > 0) {
board += space + "*";
space += space;
}
for (let x = 0; x < points[i][j]; x++) {
board += "*";
}
board += "\n";
}
}
return '';
}
}
答案 0 :(得分:0)
points
.map((row, i) => " ".repeat(i) + row.map(cell => (cell ? "*" : " ")).join(""))
.join("\n");
答案 1 :(得分:0)
您可以使用几个reduce()
函数使用索引来控制外部空间和内部循环,以控制初始空间。外部reduce
遍历每一行,内部reduce
根据布尔值组成*
字符串。
let points = [
[true, false, true, false, true, false, true, false, true, false],
[false, true, false, true, false, true, false, true, false, true],
[true, false, true, false, true, false, true, false, true, false],
[false, true, false, true, false, true, false, true, false, true],
[true, false, true, false, true, false, true, false, true, false]
];
let result = points.reduce((str, arr, i) => {
return str
+ ' '.repeat(i)
+ arr.reduce((subst, bool) => subst + (bool ? '*' : ''), '')
+ '\n'
}, '')
console.log(result)
答案 2 :(得分:0)
根据您的描述,如果您要坚持循环,循环应该与此类似。
let points = [
[true, false, true, false, true, false, true, false, true, false],
[false, true, false, true, false, true, false, true, false, true],
[true, false, true, false, true, false, true, false, true, false],
[false, true, false, true, false, true, false, true, false, true],
[true, false, true, false, true, false, true, false, true, false]
];
let board = "";
for (let i = 0; i < points.length; i++) {
for (let j = 0; j < points[i].length; j++) {
if (j === 0 && i !== 0) {
board += "<br>";
for (let k = 0; k < i; k++) {
board += "\xa0";
}
}
board += points[i][j] ? "*" : " ";
}
}
document.write(board);
但是,如果要显示的“预期结果”,则需要删除空格。在这方面,您的预期结果与描述不符。
答案 3 :(得分:0)
我只会使用Array.prototype.map。为了简洁起见,此处的代码使用了当代ES6,但如果需要,可以轻松地移植到ES5。
let points = [
[true, false, true, false, true, false, true, false, true, false],
[false, true, false, true, false, true, false, true, false, true],
[true, false, true, false, true, false, true, false, true, false],
[false, true, false, true, false, true, false, true, false, true],
[true, false, true, false, true, false, true, false, true, false]
];
points.map((row, i) => {
const padded = [];
while (i--) {
padded.push(' ');
}
return [
...padded,
...row.map(point => point ? '*' : ' ')
].join('');
}).join('\n');
我正在使用:
join
放入一个字符串() => {}
和隐式return
语句作为对map
的回调函数输出