我好像不明白为什么我一直打印出多余的0。
到目前为止,如果值是730,则显示如下:
Expected: '700 + 30', instead got: '700 + 30 + 0'
标准:
“系统将为您提供一个数字,您需要将其作为展开形式的字符串返回。例如:
12应返回10 +2
42应返回40 +2
70304应返回70000 + 300 +4
注意:所有数字都将是大于0的整数。“
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;
}
}
发布于 2017-07-12 06:51:36
它进入第一个if检查,它没有说明0,所以你需要检查在那个检查中它是否为0。
if (i === numArrLen-1 && numArr[i]!==0)
在那之后你会遇到的问题是你会有一个尾随的+
。
我要做的不是添加字符串,而是推送到一个数组并连接
var result = []
result.push(30)
result.push(2)
console.log(result.join(" + ")
你可以使用数组方法来解决这个问题。
(102030).toString().split("").map((n,i,a) => n*Math.pow(10, a.length-i-1)).filter(n => n>0).join(" + ")
发布于 2018-03-02 11:17:51
这就是我解决问题的方法。
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;
}
发布于 2018-09-17 01:01:50
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
}
https://stackoverflow.com/questions/45045514
复制相似问题