最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Square every digit of a number - Stack Overflow

programmeradmin10浏览0评论

I am trying to learn JavaScript but find it to be a bit confusing. I am trying to square every digit of a number

For example: run 9119 through the function, 811181 will come out, because 9^2 is 81 and 1^2 is 1.

My code:

function squareDigits(num){
    return Math.pow(num[0],2) && Math.pow(num[1],2);
}

Correct code:

function squareDigits(num){
    return Number(('' + num).split('').map(function (val) { return val * val;}).join(''));
}

I do not know why .map, .split, and .join was used to answer the question.

I am trying to learn JavaScript but find it to be a bit confusing. I am trying to square every digit of a number

For example: run 9119 through the function, 811181 will come out, because 9^2 is 81 and 1^2 is 1.

My code:

function squareDigits(num){
    return Math.pow(num[0],2) && Math.pow(num[1],2);
}

Correct code:

function squareDigits(num){
    return Number(('' + num).split('').map(function (val) { return val * val;}).join(''));
}

I do not know why .map, .split, and .join was used to answer the question.

Share Improve this question edited Jun 15, 2020 at 10:17 Joachim Sauer 308k59 gold badges566 silver badges622 bronze badges asked May 10, 2018 at 16:34 kem247kem247 411 gold badge1 silver badge4 bronze badges 2
  • 2 Splitting the number allows us to use the map function to apply a function to all of these elements we just split. The function we choose is to square it. We join all these elements back together so that it is returned as a single string. – chevybow Commented May 10, 2018 at 16:36
  • Do as all of us need to, learn to read the docs. – Asons Commented May 10, 2018 at 16:42
Add a comment  | 

5 Answers 5

Reset to default 11

.split takes a string and splits it into an array based on the character(s) passed to it '' in this case.

So

("9119").split('') === ["9", "1", "1", "9"]

.map works like a for loop but takes a function as an argument. That function is applied to every member of the array.

So

["9", "1", "1", "9"].map(function(val) { return val * val;}) === ["81", "1", "1", "81"]

.join does the opposite of .split. It takes an Array and concatenates it into a string based on the character(s) passed to it.

So

["81", "1", "1", "81"].join('') === "811181"

Additionally, the && operator checks to see if the expressions on either side of it evaluate to true. If both expressions evaluate to true, only then will it return true. It always returns a Boolean though. I think you wanted to convert your values to string first using Number.toString() and then append them together using the + operator

return Math.pow(num[0],2).toString() + Math.pow(num[1],2).toString();

function squareDigits(num) {

// Convert the result to a number. "252525" -> 252525
return Number( 
                num.toString() // num === "555"

                .split('') // ["5", "5", "5"]

                .map(elem => elem * elem) "5" * "5" === 25 (Type coversion)
                // Now we have [25, 25, 25]

                .join('') // "252525"
            );

}

squareDigits(555);

Basically you need single digits for getting squared values.

You could take Array.from, which splits a string (which is a type with an implemented Symbol.iterator) into characters and uses an optional maping for the values.

function sqare(number) {
    return +Array.from(number.toString(), v => v * v).join('');
}

console.log(sqare(9119));

There are several methods of this, but the first that comes to mind is to pass the number as a string, split it, then parse the numbers, square them individually, make them strings, and paste them back together, it sounds complex but makes sense once you see it

//function takes number as an argument
function convertNumber(num){
   //the toString method converts a number into a string
   var number = num.toString();
   //the split method splits the string into individual numbers
   var arr = number.split("");
   //this variable will hold the numbers that we square later
   var squaredArr = [];
   //the for loop iterates through everything in our array
   for(var i=0; i<arr.length; i++){
      //parseInt turns a string into a number
      var int = parseInt(arr[i]);
      //Math.pow raises integers to a given exponent, in this case 2
      int = Math.pow(int, 2);
      //we push the number we just made into our squared array as a string
      squaredArr.push(int.toString());
   }
   //the function returns the numbers in the squared array after joining 
   //them together.  You could also parseInt the array if you wanted, doing 
   //this as parseInt(squaredArr[0]);  (this would be done after joining)
   return squaredArr.join('');

}

try these code..

function squareDigits(n) {
    return +(n.toString().split('').map(val => val * val).join(''));
}
console.log(squareDigits(4444));

here + sign is convert the string into an integer.

发布评论

评论列表(0)

  1. 暂无评论