Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据计数器长度添加字符串?_Javascript - Fatal编程技术网

Javascript 根据计数器长度添加字符串?

Javascript 根据计数器长度添加字符串?,javascript,Javascript,我有一个作业,我写了一个扩展形式的数字,并显示为字符串 例如: expandedForm(7020); // should return '7000 + 20'; expandedForm(7402); // '7000 + 400 + 2'; 我还没有完全弄明白,但我当前的代码如下所示: function expandedForm(num) { let numArr = Array.from(num.toString()).map(Number), counter = nu

我有一个作业,我写了一个扩展形式的数字,并显示为字符串

例如:

expandedForm(7020); // should return '7000 + 20';
expandedForm(7402); // '7000 + 400 + 2';
我还没有完全弄明白,但我当前的代码如下所示:

function expandedForm(num) {

  let numArr = Array.from(num.toString()).map(Number),
      counter = numArr.length,
      answer = "";

  for(let i = 0; i < numArr.length; i++) {
      (numArr[i] === 0) ? counter-- : --counter;
      console.log(numArr[i].toString(), counter);       
  }

}

expandedForm(702); // returns '7' 2 and '2' 0
函数展开形式(num){
设numar=Array.from(num.toString()).map(Number),
计数器=numArr.length,
答案=”;
for(设i=0;i
我跳过0,因为它应该被忽略,检查每个整数并用计数器检查它的单位数量。这很有帮助,但现在我正试图根据
计数器
值,以某种方式将'00'添加到'7'中。因此,如果
计数器
为2,我需要添加两个0作为字符串“00”

有一个很好的机会,我没有这样做的最佳做法,所以如果一些事情应该做不同的东西,我已经请建议。多谢各位

  "0".repeat(counter)
就这样。。。然后将所有这些连接到字符串,就完成了:)


还请注意:

 (numArr[i] === 0) ? counter-- : --counter;
基本上等于
计数器--


“最佳实践”完全是基于意见的,下面是我如何做到这一点的:

  const chars = [...("" + input)];
  return chars
     .map((char, i) => char + "0".repeat(chars.length - i - 1))
     .filter(it => it[0] !== "0")
     .join(" + ");
就这样。。。然后将所有这些连接到字符串,就完成了:)


还请注意:

 (numArr[i] === 0) ? counter-- : --counter;
基本上等于
计数器--


“最佳实践”完全是基于意见的,下面是我如何做到这一点的:

  const chars = [...("" + input)];
  return chars
     .map((char, i) => char + "0".repeat(chars.length - i - 1))
     .filter(it => it[0] !== "0")
     .join(" + ");

如果您对代码高尔夫感兴趣(它很有趣,但并不总是一种“最佳实践”),您可以使用:

[...`${input}`].map((c,i,a)=>c.padEnd(a.length-i,'0')).filter(c=>+c).join(' + ')
这就是它的作用:

> input = 2
> [...`${input}`].map((c,i,a)=>c.padEnd(a.length-i,'0')).filter(c=>+c).join(' + ')
'2'
> input = 200
> [...`${input}`].map((c,i,a)=>c.padEnd(a.length-i,'0')).filter(c=>+c).join(' + ')
'200'
> input = 209777800001
> [...`${input}`].map((c,i,a)=>c.padEnd(a.length-i,'0')).filter(c=>+c).join(' + ')
'200000000000 + 9000000000 + 700000000 + 70000000 + 7000000 + 800000 + 1'
以下是它的工作原理:

[...`${input}`]
用数字中的数字组成一个数组。例如,7503变为
['7','5','0','3']

.map((c,i,a)=>c.padEnd(a.length-i,'0'))
.filter(c=>+c)
.join(' + ')
用正确的零数将每个数字映射到其填充。对
map
的回调将获取数字、数组索引,然后是数组本身。对于正在运行的示例,
['7000'、'500'、'00'、'3']

.map((c,i,a)=>c.padEnd(a.length-i,'0'))
.filter(c=>+c)
.join(' + ')
从数组中删除任何零字符串,如
“0”
“0000”
等。现在我们有了
['7000'、'500'、'3']

.map((c,i,a)=>c.padEnd(a.length-i,'0'))
.filter(c=>+c)
.join(' + ')
做它看起来像做的事

以下是此解决方案不具备的功能:

  • 处理值0(因为得到的是空字符串)
  • 处理负数
  • 处理非整数
  • 第一个问题可以通过这样做来解决

    [...`${input}`].map((c,i,a)=>c.padEnd(a.length-i,'0')).filter(c=>+c).join(' + ') || '0'
    
    既然这是一项任务,我就把另外两个案子留给你

    向指派问题的人解释这一点也很有趣。;-)

    如另一个答案所述,最佳实践是主观的。通过引入中间变量,您可以更加明确:

    const chars = Array.from(`${input}`);
    const places = chars.map((c, i, a) => c.padEnd(a.length - i, '0'));
    const nonZeros = places.filter(c => Number(c) !== 0);
    const result = nonZeros.join(' + ') || '0';
    

    同样,最佳实践也需要您进行一些错误处理。如果输入是NaN或字符串、数组或对象,该怎么办?如果它是无穷大呢?浮点?

    如果您对代码高尔夫感兴趣(这很有趣,但并不总是一种“最佳实践”),您可以使用:

    [...`${input}`].map((c,i,a)=>c.padEnd(a.length-i,'0')).filter(c=>+c).join(' + ')
    
    这就是它的作用:

    > input = 2
    > [...`${input}`].map((c,i,a)=>c.padEnd(a.length-i,'0')).filter(c=>+c).join(' + ')
    '2'
    > input = 200
    > [...`${input}`].map((c,i,a)=>c.padEnd(a.length-i,'0')).filter(c=>+c).join(' + ')
    '200'
    > input = 209777800001
    > [...`${input}`].map((c,i,a)=>c.padEnd(a.length-i,'0')).filter(c=>+c).join(' + ')
    '200000000000 + 9000000000 + 700000000 + 70000000 + 7000000 + 800000 + 1'
    
    以下是它的工作原理:

    [...`${input}`]
    
    用数字中的数字组成一个数组。例如,7503变为
    ['7','5','0','3']

    .map((c,i,a)=>c.padEnd(a.length-i,'0'))
    
    .filter(c=>+c)
    
    .join(' + ')
    
    用正确的零数将每个数字映射到其填充。对
    map
    的回调将获取数字、数组索引,然后是数组本身。对于正在运行的示例,
    ['7000'、'500'、'00'、'3']

    .map((c,i,a)=>c.padEnd(a.length-i,'0'))
    
    .filter(c=>+c)
    
    .join(' + ')
    
    从数组中删除任何零字符串,如
    “0”
    “0000”
    等。现在我们有了
    ['7000'、'500'、'3']

    .map((c,i,a)=>c.padEnd(a.length-i,'0'))
    
    .filter(c=>+c)
    
    .join(' + ')
    
    做它看起来像做的事

    以下是此解决方案不具备的功能:

  • 处理值0(因为得到的是空字符串)
  • 处理负数
  • 处理非整数
  • 第一个问题可以通过这样做来解决

    [...`${input}`].map((c,i,a)=>c.padEnd(a.length-i,'0')).filter(c=>+c).join(' + ') || '0'
    
    既然这是一项任务,我就把另外两个案子留给你

    向指派问题的人解释这一点也很有趣。;-)

    如另一个答案所述,最佳实践是主观的。通过引入中间变量,您可以更加明确:

    const chars = Array.from(`${input}`);
    const places = chars.map((c, i, a) => c.padEnd(a.length - i, '0'));
    const nonZeros = places.filter(c => Number(c) !== 0);
    const result = nonZeros.join(' + ') || '0';
    

    同样,最佳实践也需要您进行一些错误处理。如果输入是NaN或字符串、数组或对象,该怎么办?如果它是无穷大呢?浮点?

    可能重复的(请学习文档!!)可能重复的(请学习文档!!)如果您发布一个完整的解决方案,对大家都有好处,那就太好了,谢谢。哇。。这再容易不过了。回答了我的问题并完成了我的作业,谢谢先生:0您能解释一下三元运算符语句的含义吗?因为如果参数有0,我需要跳过它?但是你不能跳过任何东西。如果是0,则表示您使用
    计数器--
    ,如果是另一个数字,则表示您使用
    --计数器--
    。两者都会减少计数器。如果你发布一个完整的解决方案,对每个人都有利,那就太好了,谢谢。哇。。这再容易不过了。回答了我的问题并完成了我的作业,谢谢先生:0您能解释一下三元运算符语句的含义吗?因为如果参数有0,我需要跳过它?但是你不能跳过任何东西。如果是0,则表示您使用
    计数器--
    ,如果是另一个数字,则表示您使用
    --计数器--
    。两者都将减少计数器。