জাভাস্ক্রিপ্ট সমষ্টি সংখ্যা একটি অ্যারে দুটি সংখ্যা ক্রম দ্বারা

আমি এই ব্যায়ামের সাথে আটকে আছি, শেষ পর্যন্ত আমি আপনাকে বলি, আমার আউটপুট কি কিন্তু ব্যায়ামের বিবরণ আগে, ধন্যবাদ আগাম!

বর্ণনাঃ

এটি সংখ্যা এবং অক্ষর সহ একটি অ্যারে পায় এবং এটির সংখ্যার সুশৃঙ্খলতার সাথে এটি প্রদান করে। অক্ষর অপরিবর্তিত থাকা Beautify প্রক্রিয়াটি একটি সংখ্যাকে একক সংখ্যার সংখ্যার সাথে একসাথে সংকীর্ণ করে তার সমস্ত সংখ্যা একত্রিত করে:

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']

আমার কোড:

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

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'])
</div> </div>

An the output I receive is => [2, 3, 5, 9, 4, "A", "b"]

এই কি "পূর্ববর্তী" ধাপটি করার আগে পদক্ষেপ নাকি আমি কিছু ভুল করছি?

0
... যে ছাড়া dr (0) == 0 , 9 নয়
যোগ লেখক georg, উৎস
নম্বরটি সুন্দর করার জন্য, আলগো হবে (সংখ্যা% 9 == 0) তারপর 9 নম্বর সংখ্যা% 9 চূড়ান্ত উত্তর হবে
যোগ লেখক sinsuren, উৎস

7 উত্তর

হাই আপনি মতামত আমার দ্বারা উল্লিখিত এই মত চেষ্টা করতে পারেন।

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

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']))
</div> </div>

সম্পাদনা: সুপারিশের জন্য ধন্যবাদ @ এজর্গ।

7
যোগ
হ্যালো @ সিনিনরেন আমি আপনার "বুঝতে পারছি না যদি (sNumber% 9 == 0) newArray.push (9);" যদি আমি অ্যারে পরিবর্তন আর্গুমেন্ট এখনও কাজ করবে?
যোগ লেখক Defoe, উৎস
@ ডিফো এটা কোন সংখ্যা জন্য কাজ করবে।
যোগ লেখক sinsuren, উৎস

আমি আপনার কোড পরিবর্তন করেছেন। নীচের কোড খুঁজে পেতে, যা আপনার প্রয়োজন অনুযায়ী ফলাফল প্রদান করা হয়।

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
যোগ
এটা 18 এর জন্য কি উত্তর দেয়
যোগ লেখক sinsuren, উৎস
আপনার কোডে, আপনি নতুন অভিযানে প্রতিটি সংযোজিত সংখ্যা যোগ করছেন। সুতরাং আপনার ফলাফল উল্লেখ করতে পারে। আমি সমস্ত চরিত্র সমষ্টি এবং% 9 এর পরে তালিকায় যুক্ত করেছি। সুতরাং, এটি শুধুমাত্র একক ডিজিট ফেরত দেবে যা আপনার প্রয়োজন।
যোগ লেখক Anavar Bharmal, উৎস
হ্যাঁ, আমি আপনার উত্তর থেকে পরিবর্তন করেছেন। ধন্যবাদ।
যোগ লেখক Anavar Bharmal, উৎস

You can use recursion + array.reduce

recursion

<div class="snippet" data-lang="js" data-hide="true" data-console="true" data-babel="false"> <div class="snippet-code snippet-currently-hidden">

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))
})
</div> </div>
2
যোগ
চমৎকার রাজেশ! আপনি কিছু মন্তব্য করতে পারেন তাই সবাই, এবং নিজেকে অন্তর্ভুক্ত, প্রতিটি লাইন কি করছেন বুঝতে পারে?
যোগ লেখক Defoe, উৎস
ধন্যবাদ! @Rajesh!
যোগ লেখক Defoe, উৎস
@ ডিফো আমি আমার স্নিপেট আপডেট করেছি। আশা করি এটা সাহায্য করবে
যোগ লেখক Rajesh, উৎস

এই মত চেষ্টা করুন:

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'])
1
যোগ

কোন স্ট্রিং অপারেশন ছাড়া বিশুদ্ধ কার্যকরী এই আমার সমাধান হবে;

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

function funnySum(n){
  var d = Math.floor(Math.log10(n) +1), //get number of digits
    sum = Array(d).fill()               //prepare the array and place digits
                  .map((_,i) => Math.floor(n % Math.pow(10,d-i)/Math.pow(10,d-1-i)))
                  .reduce((p,c) => p+c);//get sum of array items
  return sum > 9 ? funnySum(sum) : sum; //if still two digits continue...
}

console.log(funnySum(9956));
</div> </div>
0
যোগ

আপনার উদাহরণে আপনার সাথে অংশটি পরিবর্তন করা উচিত:

এ থেকে:

for (var i = 0, len = sNumber.length; i < len; i += 1) {
    newArray.push(+sNumber.charAt(i));
}
console.log(newArray);;

:

var mySum = 0;
for (var i = 0, len = sNumber.length; i < len; i += 1) {
    mySum += sNumber.charAt(i);
}

newArray.push(mySum);
console.log(newArray);
0
যোগ
পুনরাবৃত্তির সাথে আপনার শেষ কোড: beautifyNumbers ([23,59, 4, 'A', 'b']) => [3, 9, 0, "এ", "বি"] আমি আশা করি [5, 5, 4, 'এ', 'বি'] যা আমি চাই
যোগ লেখক Defoe, উৎস
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;
 });
}
0
যোগ