首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过javascript以扩展形式写入数字时,打印出额外的0

通过javascript以扩展形式写入数字时,打印出额外的0
EN

Stack Overflow用户
提问于 2017-07-12 06:34:34
回答 4查看 1.6K关注 0票数 1

我好像不明白为什么我一直打印出多余的0。

到目前为止,如果值是730,则显示如下:

代码语言:javascript
复制
Expected: '700 + 30', instead got: '700 + 30 + 0'

标准:

“系统将为您提供一个数字,您需要将其作为展开形式的字符串返回。例如:

12应返回10 +2

42应返回40 +2

70304应返回70000 + 300 +4

注意:所有数字都将是大于0的整数。“

代码语言:javascript
复制
function expandedForm(num) {
  var i,
      position,
      numArr = Array.from(num.toString()).map(Number),
      numArrLen = numArr.length,
      result = '';
  if(num < 10){
    return num;
  } else {
    for(i = 0; i < numArrLen; i++){
      position = numArrLen-1-i;

      if( i === numArrLen-1 ){
        result += numArr[i] * Math.pow(10, position);
        console.log('done',result);
      } else {
        if(numArr[i] !== 0){
          result += numArr[i] * Math.pow(10, position) + " + ";
          console.log('keep going',result);
        } else {
          continue;
          console.log('zero', result);
        }
      }
    }
    return result;
  }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-07-12 06:51:36

它进入第一个if检查,它没有说明0,所以你需要检查在那个检查中它是否为0。

代码语言:javascript
复制
if (i === numArrLen-1 && numArr[i]!==0)

在那之后你会遇到的问题是你会有一个尾随的+

我要做的不是添加字符串,而是推送到一个数组并连接

代码语言:javascript
复制
var result = []
result.push(30)
result.push(2)
console.log(result.join(" + ")

你可以使用数组方法来解决这个问题。

代码语言:javascript
复制
(102030).toString().split("").map((n,i,a) => n*Math.pow(10, a.length-i-1)).filter(n => n>0).join(" + ")
票数 4
EN

Stack Overflow用户

发布于 2018-03-02 11:17:51

这就是我解决问题的方法。

代码语言:javascript
复制
function expandedForm(num) {
  // Convert num to a string array
  let numStringArray = Array.from(String(num));
  // Get length of string array
  let len = numStringArray.length;
  let result = '';

  // For each digit in array
  numStringArray.map( (n,index) => {
    // Perform only if n > 0
    if( n>0 ) {
      // Add plus sign if result is not empty (for the next digits)
      if( result ) { result += ' + '; };

      // Pad zeros the right limited to array length minus current index
      result += new String(n).padEnd(len-index,'0');
    }
  });

  return result;
}
票数 0
EN

Stack Overflow用户

发布于 2018-09-17 01:01:50

代码语言:javascript
复制
This was my solution, could have been refactored better but it works.

function expandedForm(num) {

let myStr = num.toString().split(''), //convert number to string array
    strLength = myStr.length,
    arr = new Array();

if (strLength === 1) { /*If array length is one*/
    return num;
}

for (let i = 0; i < strLength; i++) { //loop

    if (myStr[i] === 0) { //if number starts with 0
        arr.push('0')
    }

    if (i + 1 === strLength) { //if array is close to end
        arr.push(myStr[i])
    }
    // add zero to number by length difference in array
    // add number to   
    if (myStr[i] !== 0 && i + 1 !== strLength) {
        for (let x = 1; x < (strLength - myStr.indexOf(myStr[i])); x++) {
            myStr[i] += '0'
        }  
        arr.push(myStr[i]);
    }
}
return arr.filter((obj) => obj.match(/[1-9]/)) //remove items with just 0s
    .map(obj => obj += ' + ') // add '+'
    .reduce((a, b) => a + b).slice(0, -2); //remove whitespace

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45045514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档