我必须制作乘法表,对于n = 3,它看起来像这样:
1 x 1 = 1 | 1 x 2 = 2 | 1 x 3 = 3
2 x 1 = 2 | 2 x 2 = 4 | 2 x 3 = 6
3 x 1 = 3 | 3 x 2 = 6 | 3 x 3 = 9
现在我的代码如下所示:
var n = 3;
var result;
for (i = 1; i <= n; i++) {
var result = '';
for(j = 1; j <= n; j++) {
result += ` ${i} * ${j} = ${i * j}`;
}
console.log(result);
}
我的结果是:
1 x 1 = 1 1 x 2 = 2 1 x 3 = 3
2 x 1 = 2 2 x 2 = 4 2 x 3 = 6
3 x 1 = 3 3 x 2 = 6 3 x 3 = 9
而且我不知道如何在数学运算之间添加"|"分开。如果我在结果变量的末尾添加"|",我也会在上次操作后得到它,但我不想要它。
不是最后一行时,您可以将 | 附加到末尾。
var n = 3;
var result;
for (i = 1; i <= n; i++) {
var result = '';
for(j = 1; j <= n; j++) {
result += ` ${i} * ${j} = ${i * j}`;
if(j != n)
{
result += ' |';
}
}
console.log(result);
}
您可以使用取模运算符%
添加 check,或者只是j != n
以查看它是否是行的最后一部分,并根据该条件添加|
。
var n = 3;
var result;
for (i = 1; i <= n; i++) {
var result = '';
for (j = 1; j <= n; j++) {
result += ` ${i} * ${j} = ${i * j}`;
result += j % n ? ' |' : ''
}
console.log(result);
}
您可以使用Array.from()
方法和join
来执行此操作。
var n = 4;
const result = Array.from(Array(n), (e, i) => {
i += 1
return Array.from(Array(n), (a, j) => {
j += 1
return `${i} * ${j} = ${i * j}` + (j != n ? ' | ' : '')
}).join('')
}).join('n')
console.log(result)
您可以使用逻辑 AND &&
和字符串添加检查。它返回空字符串或分隔符。
var n = 3,
result,
i, j;
for (i = 1; i <= n; i++) {
result = '';
for (j = 1; j <= n; j++) {
result += result && ' |';
result += ` ${i} * ${j} = ${i * j}`;
}
console.log(result);
}
与其将管道添加到每个项目的末尾,不如将其添加到每个项目的开头(第一项除外(:
var n = 3;
var result;
for (i = 1; i <= n; i++) {
var result = '';
for(j = 1; j <= n; j++) {
if(j !== 1)
{
result += ' | ';
}
result += `${i} * ${j} = ${i * j}`;
}
console.log(result);
}
我可能会使用一些range
函数(例如range(3, 7) //=> [3, 4, 5, 6, 7]
(,然后在外部和内部范围内map
,如下所示:
const range = (b, e) => Array.from({length: e - b + 1}, (_, i) => b + i)
const multTable = (m, n) => range(1, n).map(i => range(1, m).map(
j => `${i} x ${j} = ${i * j}`
).join(' | ')).join('n')
console.log(multTable(3, 3))
一旦您的产品或因素达到两位数,这将停止排队。 如果这是一个问题,您可以将join(' | ')
替换为 join('t|t')
。 它不会是完美的,但它可能会更好。
像这样尝试
var n = 3;
var result;
for (i = 1; i <= n; i++) {
var result = '';
for(j = 1; j <= n; j++) {
if(j!=n)
result += ` ${i} * ${j} = ${i * j}` + '|';
else
result += ` ${i} * ${j} = ${i * j}`;
}
console.log(result);
}
它应该是:
var n = 3;
var result = '';
for (i = 1; i <= n; i++) {
var result = '';
for(j = 1; j <= n; j++) {
result.length && result += '|';
result += ` ${i} * ${j} = ${i * j}`;
}
console.log(result);
}
对于所有 n :
function table(n){
var i, j;
for (i = 1; i <= n; i++) {
var result = '';
for(j = 1; j <= n - 1; j++)
result += ` ${i} x ${j} = ${i * j} |`;
result += ` ${i} x ${j} = ${i * j}`
console.log(result);
}
}
table(1);
table(2);
table(3);
只需使用数组来收集结果,然后使用|
join
部分
var n = 3;
var result;
for (let i = 1; i <= n; i++) {
result = [];
for (let j = 1; j <= n; j++) {
result.push(`${i} * ${j} = ${i * j}`);
}
console.log(result.join(' | '));
}
另一种方法是删除循环中最后一个出现的"|",slice()
:
var n = 3;
var result;
for (var i = 1; i <= n; i++) {
var result = '';
for (var j = 1; j <= n; j++) {
result += ` ${i} * ${j} = ${i * j} |`;
}
result = result.slice(0, -1);
console.log(result)
}
尝试
let n =3;
[...Array(n)].map((_,i,a)=>
console.log(a.map((_,j)=>`${i+1} * ${++j} = ${(i+1)*j}`).join(' | ')));
let n =3;
[...Array(n)].map((_,i,a)=>console.log(a.map((_,j)=>`${i+1} * ${++j} = ${(i+1)*j}`).join(' | ')));