Javascript将数组中的数字按两位数顺序求和

Javascript将数组中的数字按两位数顺序求和,javascript,sum,letters,Javascript,Sum,Letters,我一直在做这个练习,最后我会告诉你我的输出是什么,但在描述这个练习之前,请提前感谢 说明: 它接收一个带有数字和字母的数组,并返回一个带有美化数字的数组。信件保持不变 美化过程是通过将所有数字相加,将一个数字减少为一位数: 123 = 6 because 1+2+3 = 6 9 = 9 9956 = 2 because 9+9+5+6 = 29 -> 2+9 = 11 -> 1+1 = 2 793 = 1 because 7+9+3 = 19 -> 1+9 = 10 ->

我一直在做这个练习,最后我会告诉你我的输出是什么,但在描述这个练习之前,请提前感谢

说明:

它接收一个带有数字和字母的数组,并返回一个带有美化数字的数组。信件保持不变 美化过程是通过将所有数字相加,将一个数字减少为一位数:

123 = 6 because 1+2+3 = 6
9 = 9
9956 = 2 because 9+9+5+6 = 29 -> 2+9 = 11 -> 1+1 = 2
793 = 1 because 7+9+3 = 19 -> 1+9 = 10 -> 1+0 = 1
Example: beautifyNumbers([23,59, 4,'A','b']) returns [5, 5, 4, 'A', 'b']
我的代码:

函数美化数值数组{ var newArray=[]; array.forEachfunctionelement{ //检查字符是否为字母而不是数字 如果元素的类型==编号{ var sNumber=element.toString; 对于变量i=0,len=sNumber.length;i“B” } console.lognewArray;; }否则{ //将数字推送到数组中,而不进行 //有什么变化吗 newArray.pushelement; } }; //返回数组 返回新数组; } BeautifyNumber[23,59,4,'A',b']您可以使用递归+数组.reduce

递归 函数sumOfDigitsnum{ //检查值是数字还是字母数字 如果!isNaNnum{ //转换数字和拆分以获取单个值。 //循环值并添加它们 var sum=num.toString.split.reducefunctionp,c{ //+p是parseIntp的简写 return+p++c; }; //检查数字是否大于10。如果是,则重复此过程 如果总和>=10,总和=数字总和; 回报金额; } //如果值不是数字,则返回值 否则返回num; } var数据=[123,4567,'a',abc,0]; data.foreachFunction{ console.logsumOfDigitsn } 可以使用递归+数组.reduce

递归 函数sumOfDigitsnum{ //检查值是数字还是字母数字 如果!isNaNnum{ //转换数字和拆分以获取单个值。 //循环值并添加它们 var sum=num.toString.split.reducefunctionp,c{ //+p是parseIntp的简写 return+p++c; }; //检查数字是否大于10。如果是,则重复此过程 如果总和>=10,总和=数字总和; 回报金额; } //如果值不是数字,则返回值 否则返回num; } var数据=[123,4567,'a',abc,0]; data.foreachFunction{ console.logsumOfDigitsn
} 在您的示例中,您应使用以下内容更改零件:

发件人:

致:


在您的示例中,您应使用以下内容更改零件:

发件人:

致:

试着这样做:

function beautifyNumbers(array) {

  var newArray = [];
  array.forEach(function(element) {
    // Checks if character is a letter and not a number
    if (typeof element == "number") {
      newArray.push(beautifyElement(element));
    } else {
      // pushes numbers to the array without making
      // any change to them
      newArray.push(element);
    }
  });
  // returns the array
  return newArray;


}

   function beautifyElement(element){
    var sNumber = element.toString();
    var sum = 0;
    for (var i = 0, len = sNumber.length; i < len; i += 1) {
        sum = sum + +sNumber[i];
    }
    if(sum>9){
        return beautifyElement(sum);
    }else{
        return sum;
    }
}

beautifyNumbers([23, 59, 4, 'A', 'b'])
试着这样做:

function beautifyNumbers(array) {

  var newArray = [];
  array.forEach(function(element) {
    // Checks if character is a letter and not a number
    if (typeof element == "number") {
      newArray.push(beautifyElement(element));
    } else {
      // pushes numbers to the array without making
      // any change to them
      newArray.push(element);
    }
  });
  // returns the array
  return newArray;


}

   function beautifyElement(element){
    var sNumber = element.toString();
    var sum = 0;
    for (var i = 0, len = sNumber.length; i < len; i += 1) {
        sum = sum + +sNumber[i];
    }
    if(sum>9){
        return beautifyElement(sum);
    }else{
        return sum;
    }
}

beautifyNumbers([23, 59, 4, 'A', 'b'])

我已对您的代码进行了更改。请找到下面的代码,这是根据您的需要给出的结果

function beautifyNumbers(array) {
            var newArray = [];
            array.forEach(function (element) {
                // Checks if character is a letter and not a number
                if (typeof element == "number") {
                    var sNumber = element.toString();
                    var beutifySum = 0;
                    for (var i = 0, len = sNumber.length; i < len; i += 1) {
                        beutifySum += +sNumber.charAt(i);
                    }

                    beutifySum = beutifySum % 9 === 0 ? 9 : beutifySum % 9;
                    newArray.push(beutifySum);
                } else {
                    // pushes numbers to the array without making
                    // any change to them
                    newArray.push(element);
                }
            });

            console.log(newArray);
            // returns the array
            return newArray;
        }

beautifyNumbers([23, 59, 4, 'A', 'b'])

我已对您的代码进行了更改。请找到下面的代码,这是根据您的需要给出的结果

function beautifyNumbers(array) {
            var newArray = [];
            array.forEach(function (element) {
                // Checks if character is a letter and not a number
                if (typeof element == "number") {
                    var sNumber = element.toString();
                    var beutifySum = 0;
                    for (var i = 0, len = sNumber.length; i < len; i += 1) {
                        beutifySum += +sNumber.charAt(i);
                    }

                    beutifySum = beutifySum % 9 === 0 ? 9 : beutifySum % 9;
                    newArray.push(beutifySum);
                } else {
                    // pushes numbers to the array without making
                    // any change to them
                    newArray.push(element);
                }
            });

            console.log(newArray);
            // returns the array
            return newArray;
        }

beautifyNumbers([23, 59, 4, 'A', 'b'])

您好,您可以像我在评论中提到的那样尝试

函数美化数值数组{ var newArray=[]; array.forEachfunctionelement{ //检查字符是否为字母而不是数字 如果元素的类型==编号{ 如果元素%9==0&&element!=0 newArray.push9; 其他的 newArray.pushelement%9; }否则{ newArray.pushelement; } }; 返回新数组; }
console.LogBeautifyNumber[1231,0,18,27,12354,59,4'A',b']您好,您可以像我在评论中提到的那样尝试

函数美化数值数组{ var newArray=[]; array.forEachfunctionelement{ //检查字符是否为字母而不是数字 如果元素的类型==编号{ 如果元素%9==0&&element!=0 newArray.push9; 其他的 newArray.pushelement%9; }否则{ newArray.pushelement; } }; 返回新数组; }
logbeautifyNumbers[1231,0,18,27,12354,59,4,'A','b']纯函数,无任何字符串操作这将是我的解决方案

功能性幽默{ var d=Math.floorMath.log10n+1,//获取位数 sum=Arrayd.fill//准备数组并放置数字 .map,i=>Math.floorn%Math.pow10,d-i/Math.pow10,d-1-i .reducep,c=>p+c;//获取数组项的总和 return sum>9?funnySumsum:sum;//如果仍有两位数继续。。。 }
console.logfunnySum9956 没有任何字符串操作的纯函数,这将是我的解决方案

功能性幽默{ var d=Math.floorMath.log10n+1,//获取位数 sum=Arrayd.fill//准备数组并放置数字 .map,i=>Math.floorn%Math.pow10,d-i/Math.pow10,d-1-i .reducep,c=>p+c;//获取数组项的总和 return sum>9?funnySumsum:sum;//如果仍有两位数继续。。。 } console.logfunnySum9956;美化
e数字,如果数字%9==0,则算法将是9,否则数字%9将是最终答案…除了dr0==0,而不是9为了美化数字,算法将是如果数字%9==0,则9,否则数字%9将是最终答案…除了dr0==0,而不是9在代码中,您正在将每个分离的数字添加到newArray中。因此,您的结果可能会引用。我在列表中添加了所有字符和%9。因此,它将只返回您需要的单个数字。在您的代码中,它为18给出的答案是,您将在newArray中添加每个separated数字。因此,您的结果可以参考。我在列表中添加了所有字符和%9。因此,它只会返回一位数,这是您所需要的。它为18您的最后一个递归代码给出的答案是:BeautifNumbers[23,59,4,'A','b']=>[3,9,0,A,b],而我期望的结果是[5,5,4,'A','b],这是我想要的结果,您的最后一个递归代码返回:beautifyNumbers[23,59,4,'A','b']=>[3,9,0,A,b]然而我期望[5,5,4,'A',b',这是我想要的结果Cellent Rajesh!你能发表一些评论让每个人,包括我自己,都能理解每一行在做什么吗?太棒了!你能发表一些评论让所有人,包括我自己,都能理解每一行在做什么吗?Hello@sinsuren我不明白你的ifsNumber%9==0 newArray.push9;如果我更改数组的参数,它仍然可以工作吗?Hello@sinsuren我不理解您的ifsNumber%9==0 newArray.push9;如果我改变数组的参数,它还能工作吗?
function bsum(v) {
    var res = (v+"").split('').reduce(function(a, b) {return (a | 0) + (b | 0);});
    if(res | 0 > 10) return bsum(res) ;
    else return res;
}

function beautifyNumbers(array) {
 return array.map(function(v, i) {
    if (typeof v == 'number') {
        return bsum(v) | 0;
    }
     else return v;
 });
}