仅在操作之间分隔符



我必须制作乘法表,对于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(' | ')));

最新更新