首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组中的Javascript和数字,每个数字序列由两位数组成

数组中的Javascript和数字,每个数字序列由两位数组成
EN

Stack Overflow用户
提问于 2016-10-03 10:43:12
回答 7查看 1.9K关注 0票数 1

我被这个练习困住了,最后我告诉你我的输出是什么,但是在对这个练习的描述之前,谢谢!

描述:

它接收一个包含数字和字母的数组,并将其返回并美化它的数字。字母保持不变,美化过程是通过将所有数字相加在一起,将一个数字减少为一个单数数字:

代码语言:javascript
复制
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']

我的代码:

代码语言:javascript
复制
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();

      for (var i = 0, len = sNumber.length; i < len; i += 1) {
        newArray.push(+sNumber.charAt(i));
        // The "+" sign converts a String variable to a Number, if possible: +'21.2' equals Number(21.2).
        // If the conversion fails, it return NaN.
        // El método charAt() de String devuelve el carácter especificado de una cadena:
        // var name="Brave new world"; name.charAt(0) => 'B'
      }
      console.log(newArray);;
    } else {
      // pushes numbers to the array without making
      // any change to them
      newArray.push(element);
    }
  });
  // returns the array
  return newArray;


}

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

A我收到的输出是=> [2, 3, 5, 9, 4, "A", "b"]

这是做之和之前的“前一步”,还是我做错了什么?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2016-10-03 11:04:46

嗨,你可以试着像我在评论中提到的那样。

代码语言:javascript
复制
function beautifyNumbers(array) {
  var newArray = [];
  array.forEach(function(element) {
    // Checks if character is a letter and not a number
    if (typeof element == "number") {
      if(element %9 == 0 && element != 0)
        newArray.push(9);
      else 
        newArray.push(element%9);
    } else {
      newArray.push(element);
    }
  });
  return newArray;
}
console.log(beautifyNumbers([1231, 0, 18, 27, 12354, 59, 4, 'A', 'b']))

编辑:谢谢@georg的建议。

票数 8
EN

Stack Overflow用户

发布于 2016-10-03 10:58:33

我已经修改了你的代码。请找到下面的代码,这是根据您的需要提供结果。

代码语言:javascript
复制
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'])
票数 3
EN

Stack Overflow用户

发布于 2016-10-03 10:52:29

您可以使用recursion + array.reduce

递归

代码语言:javascript
复制
function sumOfDigits(num) {
  // Check if value is number or alphanumeric
  if (!isNaN(num)) {
    // Convert number and split to get individual values.
    // Loop over values and add them
    var sum = num.toString().split("").reduce(function(p, c) {
      // +p is a shorthand for parseInt(p)
      return +p + +c;
    });

    // check if number is greater than 10. If yes, repeat the process
    if (sum >= 10) sum = sumOfDigits(sum);
    return sum;
  } 
  // if value is not number, return value
  else return num;
}

var data = [123, 4, 567, 'a', "abc", 0];
data.forEach(function(n) {
  console.log(sumOfDigits(n))
})

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

https://stackoverflow.com/questions/39829725

复制
相关文章

相似问题

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