সংখ্যার একটি অ্যারের যোগফল কীভাবে খুঁজে পাবেন


807

একটি অ্যারে দেওয়া [1, 2, 3, 4], আমি এর উপাদানগুলির যোগফলটি কীভাবে খুঁজে পাব? (এক্ষেত্রে যোগফল হবে 10))

আমি ভেবেছিলাম $.eachদরকারী হতে পারে, তবে কীভাবে এটি প্রয়োগ করা যায় তা সম্পর্কে আমি নিশ্চিত নই।



18
@ তেরেখো গুগলে অনাকাঙ্ক্ষিত করা স্ট্যাকওভারফ্লোতে কোনও বৈধ ঘনিষ্ঠ কারণ নয়। আপনি যদি মনে করেন যে প্রশ্নটি ভালভাবে (পুনরায়) অনুসন্ধান করা হয়নি তবে দয়া করে নীচে নামুন। (এছাড়াও উত্তর দ্বারা বিচার হচ্ছে - এটি কিছু অত্যন্ত upvoted খারাপ চর্চা (Eval) সহ অনেক সম্ভাব্য সমাধান সঙ্গে একটি অত্যন্ত বিতর্কিত বিষয় মনে করা হয় -। এটি আশ্চর্যজনক)
Trilarion

8
দ্রষ্টব্য: এখানে বেশিরভাগ উত্তরগুলি মূলত গণনা করা হয় a[0] + a[1] + ..., যা অ্যারেতে সংখ্যাযুক্ত উপাদান না থাকলে স্ট্রিং সংমিশ্রণে রূপান্তর করতে পারে। যেমন ['foo', 42].reduce((a,b)=>a+b, 0) === "0foo42"
বেনি চেরনিয়াভস্কি-পাসকিন

আর্ট্রেড্রেডকে কোনও ফিড দিতে পারে না? এমন কিছু ভাবছে [1,2,3].reduce(Math.sum)
ফিল

উত্তর:


540

প্রস্তাবিত (ডিফল্ট মান সহ হ্রাস)

অ্যারে.প্রোটোটাইপ.আরডুস ব্যবহার করা যেতে পারে অ্যারের মাধ্যমে পুনরাবৃত্তি করতে, বর্তমান উপাদানটির মানটি পূর্ববর্তী উপাদানগুলির মানগুলির যোগফলে যোগ করতে।

console.log(
  [1, 2, 3, 4].reduce((a, b) => a + b, 0)
)
console.log(
  [].reduce((a, b) => a + b, 0)
)

ডিফল্ট মান ব্যতীত

আপনি একটি টাইপরর পাবেন

console.log(
  [].reduce((a, b) => a + b)
)

ES6 এর তীর ফাংশনগুলির আগে

console.log(
  [1,2,3].reduce(function(acc, val) { return acc + val; }, 0)
)

console.log(
  [].reduce(function(acc, val) { return acc + val; }, 0)
)

অ-সংখ্যা ইনপুট

যদি অ-সংখ্যাগুলি সম্ভব ইনপুট হয়, আপনি এটি পরিচালনা করতে চাইতে পারেন?

console.log(
  ["hi", 1, 2, "frog"].reduce((a, b) => a + b)
)

let numOr0 = n => isNaN(n) ? 0 : n

console.log(
  ["hi", 1, 2, "frog"].reduce((a, b) => 
    numOr0(a) + numOr0(b))
)

অ-প্রস্তাবিত বিপজ্জনক ইভাল ব্যবহার

আমরা জাভাস্ক্রিপ্ট কোডটির একটি স্ট্রিং প্রতিনিধিত্ব সম্পাদন করতে ইওল ব্যবহার করতে পারি । অ্যারে.প্রোটোটাইপ.জাইন ফাংশনটি ব্যবহার করে অ্যারেটিকে একটি স্ট্রিংয়ে রূপান্তর করতে আমরা [1,2,3] কে "1 + 2 + 3" তে পরিবর্তন করি, যা 6 টিতে মূল্যায়ন করে।

console.log(
  eval([1,2,3].join('+'))
)

//This way is dangerous if the array is built
// from user input as it may be exploited eg: 

eval([1,"2;alert('Malicious code!')"].join('+'))

অবশ্যই একটি সতর্কতা প্রদর্শন করা সবচেয়ে খারাপ যেটি ঘটতে পারে তা নয়। আমি এটি অন্তর্ভুক্ত করার একমাত্র কারণটি অর্টুন্ডের উত্তর হিসাবে এটি পরিষ্কার হয়েছে বলে আমি মনে করি না।


7
আপনি কি জানেন যে এই reduce()যাদুটি for()দীর্ঘ কয়েক বছর পরেও সাধারণ সূচকযুক্ত লুপের চেয়ে 25-30% ধীর ? jsperf.com/reduce-vs-loop/4
tevemadar

সংখ্যাটিতে যদি "0" হয় তবে এটি সমস্যার মধ্যে পড়ে - এটি কোনও কারণেই স্ট্রিং হিসাবে ব্যাখ্যা করা যেতে পারে। 1 * এ + 1 * বি যুক্ত করা আমার পক্ষে কাজ করেছে। গতি হিসাবে, এটি লেখার পক্ষে সহজ ছিল এবং আমি গতির কোনও যত্ন নিই না
পিটার কে

1179

ইন পাতার মর্মর , ঠিক চাকরি হতে this'd reduce। আপনি এই জাতীয় কোড দেখতে পাবেন:

(reduce #'+ '(1 2 3)) ; 6

ভাগ্যক্রমে, জাভাস্ক্রিপ্টে, আমাদেরও রয়েছে reduce! দুর্ভাগ্যক্রমে, +একটি অপারেটর, কোনও ফাংশন নয়। তবে আমরা এটি সুন্দর করতে পারি! এখানে দেখুন:

const sum = [1, 2, 3].reduce(add,0); // with initial value to avoid when the array is empty

function add(accumulator, a) {
    return accumulator + a;
}

console.log(sum); // 6

কি সুন্দর না? :-)

আর ভালো! আপনি যদি ECMAScript 2015 ব্যবহার করছেন (ওরফে ECMAScript 6 ), এটি এটি সুন্দর হতে পারে:

const sum = [1, 2, 3].reduce((partial_sum, a) => partial_sum + a,0); 
console.log(sum); // 6

28
ধরে নিই আমরা সকলেই ES2015 ব্যবহার করি, আমরা এটিকে কম শব্দভাবাপন্ন করে তুলতে পারি:[1, 2, 3].reduce((a,b)=>a+b)
সাগ্রেট

1
আমি ভাবছি যদি কোনও ফাংশন (ক, খ) দিয়ে হ্রাসের কার্যকর সময়টি একটি ম্যানুয়াল পুনরাবৃত্তি এবং সংশ্লেয়ের সাথে তুলনীয় হয় বা যদি সেখানে কিছুটা ওভারহেড অন্তর্ভুক্ত থাকে?
ট্রেলারিয়ন

1
আমি বিশ্বাস করি যে এটি উত্তর দেওয়ার মতো যে উত্তরটি আপনি লিঙ্ক করেছেন এমন পৃষ্ঠায় পাওয়া যাবে: বিকাশকারী.মোজিলা.আর.ইন-
অ্যালেক্স কোহন

2
আমি অ্যারেতে কয়েকটি পদ্ধতি যুক্ত করব:Array.prototype.sum = function() { return this.reduce((a,b) => a+b, 0); } Array.prototype.avg = function() { return this.reduce((a,b) => a+b, 0)/this.length; }
পাইলেট

2
@ ব্ল্যাক এটি একটি মানকে একটি অ্যারে হ্রাস করে।
ফ্লোরিয়ান মার্জাইন

204

কমবে না কেন? এটি সাধারণত কিছুটা স্বজ্ঞাত, তবে যোগফল খুঁজে পেতে এটি ব্যবহার করা বেশ সোজা is

var a = [1,2,3];
var sum = a.reduce(function(a, b) { return a + b; }, 0);

3
আইই 8 এটি সমর্থন করে না, এবং এটি jQuery এটি যুক্ত করার ইচ্ছা করে বলে মনে হচ্ছে না। তবে প্রোটোটাইপ এটি আছে।
ইসমাelল স্মার্নু

4
@ ইসমাইল, আপনি অ্যান্ডস্কোরজেএস ব্যবহার করতে পারেন, যা উপলব্ধ থাকলে ব্রাউজারের প্রয়োগে ফিরে আসে বা অন্যথায় এর নিজস্ব প্রয়োগ করে।
পাবলো ডিয়াজ

3
কি সম্পর্কে পাল্টা স্বজ্ঞাত reduce()?
ক্যানন

3
@ এস 4 এনজি একটি একক রিটার্ন মান থেকে একটি অ্যারে Array.prototype.reduce() হ্রাস করে
ক্যানন

6
@ এস 4 এনজি ... যদি না আপনি একটি সস হ্রাস না করেন - তবে আপনি এটির প্রয়োজনীয়তার দিকে ঝুঁকছেন, অর্থাত্ ওভারহেড ছাড়াই সমস্ত স্বাদের যোগফল। :-)
সিবি ডু রিয়েজ

97
var arr = [1,2,3,4];
var total=0;
for(var i in arr) { total += arr[i]; }

3
এটি উপরের jQuery.each () সমাধানের চেয়ে বেশ দ্রুততর।
রাগান ড্যান

41
@ স্প্রোগ: তবে ব্যবহার (var i=0; i<arr.length; i++)করা আরও দ্রুত। এবং তারপরেও, ব্যবহার var sum=0; var i=arr.length; while(i--) sum += arr[i]আরও দ্রুত হয়।
অবধি

14
for... inঅ্যারেতে লুপগুলি ব্যবহার করা এই ক্ষেত্রে _ কাকতালীয়ভাবে_ এবং অ্যারে অবজেক্টগুলিকে প্রসারিত করে বলে কাজ করে। রিকিংয়ের সমাধানটি আরও ভাল
বেনজামিন গ্রুয়েনবুম

2
@ বেনজামিন গ্রুয়েনবাউম সরবরাহ করেছেন যে কোনও কিছুই অ্যারের প্রোটোটাইপে অগণিত সম্পত্তি যুক্ত করেনি ...
ক্যানন

1
@ ওয়াইএসসি না, এটি হয় না। for...inজাভাস্ক্রিপ্টের একটি লুপ সূচকগুলি গ্রহণ করে, যা কোডারদের জন্য একটি সাধারণ হোঁচট খায় যা মানগুলি প্রত্যাশা করে। ( for(var i in [1,2,3]) { console.log(i); }কনসোলে চেষ্টা করুন ।)
আম্বর

61
var total = 0;
$.each(arr,function() {
    total += this;
});

87
দয়া করে, দয়া করে reduceনীচের সাথে উত্তরটি ব্যবহার করুন ; যখন আপনার খুব বেশি নেই তখন পরিবর্তনীয় ভারগুলি ঘোষণা করবেন না।
ব্রুনো গ্রিডার


11
এটি "গৃহীত উত্তর" হওয়া সত্ত্বেও দয়া করে এটি ব্যবহার করবেন না; নীচে ফ্লোরিয়ানের উত্তর আরও ভাল!
অ্যান্ডি সিনক্লেয়ার

12
@ ব্রুনো গ্রিডার "যখন আপনার দরকার নেই তখন পরিবর্তনীয় যুদ্ধগুলি ঘোষণা করবেন না" এটি একটি অত্যাবশ্যকীয় ভাষা সম্পর্কে চূড়ান্ত পক্ষপাতী মতামত , এটি কল্পনাশক্তির কোনও অংশ দ্বারা খুব কমই গন্ধযুক্ত কোড। টাইলারের উত্তরের সাথে একেবারেই কোনও ভুল নেই, এবং টাইলার এবং ফ্লোরিয়ানের মধ্যে পার্থক্য কেবল স্টাইল।
রব

5
ওপি থেকে: আমি ভেবেছিলাম $ .একগুলি কার্যকর হতে পারে তবে কীভাবে এটি প্রয়োগ করা যায় তা সম্পর্কে আমি নিশ্চিত নই। এটি সেরা নাও হতে পারে, তবে ওপির অনুরোধটির উত্তর দিন।


29

সমস্ত আইটেমের উপর লুপিং করে এবং প্রতিটি পুনরাবৃত্তিতে sumএটিকে পরিবর্তনযোগ্য হিসাবে যুক্ত করে এটি সম্ভব।

var array = [1, 2, 3];

for (var i = 0, sum = 0; i < array.length; sum += array[i++]);

জাভাস্ক্রিপ্ট ব্লক স্কোপিং জানে না, তাই অ্যাক্সেসযোগ্য sumহবে:

console.log(sum); // => 6

উপরের মতো একই, তবে সরল ফাংশন হিসাবে টিকা দেওয়া এবং প্রস্তুত:

function sumArray(array) {
  for (
    var
      index = 0,              // The iterator
      length = array.length,  // Cache the array length
      sum = 0;                // The total amount
      index < length;         // The "for"-loop condition
      sum += array[index++]   // Add number on each iteration
  );
  return sum;
}

12
চালাক হওয়ার সময়, আমি sumলুপের বাইরে ঘোষণাকৃত কোডটি আরও বেশি পাঠযোগ্য find
বেনি চেরনিয়াভস্কি-পাসকিন

@ বেনিচেরনিয়াভস্কি-পাসকিন হ্যাঁ, এখানেও ... জানেন না কেন আমি কেন সেদিন এইভাবে করলাম ... তবে, আমি এটি যেমন করে দেব! এটি কীভাবে আমরা পেতাম তার কেবল উদাহরণ ; ... )
ইয়র্কার্ট

ES6 সাল থেকে, জাভাস্ক্রিপ্টটি ব্লক স্কোপিং constএবং এর সাথে জানে let। সুতরাং আপনি হিসাবে লুপ sumবাইরে ঘোষণা করতে পারেন । লুপের আগে আপনি অ্যারের দৈর্ঘ্যও ক্যাশে করতে পারেনforlet sum = 0;const length = array.length;
কেএসকে


15
// Given array 'arr'
var i = arr.length;
var sum = 0;
while (--i) sum += arr[i];

এটি eval()উপরের পদ্ধতির সাথে 3.604 এমএস / রান এবং 2.151 এমএস / রান (i, দৈর্ঘ্য, ++ + এর মান সহ চালানো তুলনায়) গড়ে 1.57 এমএস / রান (100 র্যান্ডম সাধারণ সংখ্যাগুলির 1000 এরও বেশি রানের উপর মাপা) হবে, ) লুপ.

পদ্ধতি নোট: এই পরীক্ষাটি গুগল অ্যাপস স্ক্রিপ্ট সার্ভারে চালিত হয়েছিল, তাই তাদের জাভাস্ক্রিপ্ট ইঞ্জিনগুলি ক্রোমের মতোই বেশ একইরকম।

সম্পাদনা: প্রতিটি রান 0.12 এমএসের --iপরিবর্তে i--(i-- হয় 1.7)

সম্পাদনা: পবিত্র প্রকাশ্য, পুরো পোস্টটি মনে করবেন না। উপরে উল্লিখিত হ্রাস () পদ্ধতিটি ব্যবহার করুন, এটি কেবল 1 এমএস / রান।


1
আপনার ব্যবহৃত সময়গুলি আমি পছন্দ করি। আপনার উত্তরটি কেবল "আমাকে বাছাই করুন, আমি সেরা!" পরিবর্তে এটি কেন আমাদের দেখায় । যাইহোক, while (--i) do_somethingসম্ভবত অন্যান্য জিনিসগুলির জন্যও কাজ করতে পারে।
রেডউল্ফ প্রোগ্রামগুলি

var sum = arr[0]
noobninja

12

আপনি কমানোরাইটও ব্যবহার করতে পারেন।

[1,2,3,4,5,6].reduceRight(function(a,b){return a+b;})

যা ফলাফল 21 হিসাবে আউটপুট।

তথ্যসূত্র: https://developer.mozilla.org/en-US/docs/Web/ জাভা স্ক্রিপ্ট / রেফারেন্স / গ্লোবাল_অবজেক্টস / অ্যারে / রেডুস রাইট


ক্রোমের ক্ষেত্রে দ্রুত হওয়া উচিত কারণ জাভাস্ক্রিপ্ট লুপিংয়ের অপ্টিমাইজেশন (অর্থাত্ দৈর্ঘ্য হ্রাস করা) এটি আরও দ্রুত চালিত করার জন্য অন্তর্নিহিত সমাবেশে প্রয়োগ করা যেতে পারে।
জ্যাক গিফিন

12

আমার মতো ক্রিয়ামূলক অনলাইনারের সন্ধানকারী কেউ? এটা নাও:

sum= arr.reduce(function (a, b) {return a + b;}, 0);

আপনি ২ য় arr.reduce(function(a, b) { return a + b;}, 0);
প্যারাম

ধন্যবাদ! আমি এটি অন্তর্ভুক্ত করব।
geek-Merlin

12

মজার পদ্ধতি:

eval([1,2,3].join("+"))

5
এই কোডটি কী হচ্ছে তা ব্যাখ্যা করে আপনি কি এই উত্তরটি প্রসারিত করতে পারেন? কেন এটি কাজ করে? এটা ঠিক কি করে? এই জিনিসগুলি উত্তরের মান উন্নত করতে সহায়তা করে।
অর্টান্ড

@ ব্যবহারকারী 40521 ইতিমধ্যে আমার মতামতটির উত্তর দিয়েছে। আমি তা দেখিনি।
ইলেক্ট্রন

এটি সংক্ষিপ্ত এবং মিষ্টি এবং অবশ্যই আকর্ষণীয় হলেও এটি খুব অদক্ষ। reduceবেশিরভাগ ক্ষেত্রে না থাকলে, সংখ্যাগরিষ্ঠের পক্ষে অবশ্যই ব্যবহার করা ভাল Using
নিনজাকান্নন

এর্ম,[1,"2;YourProgram.ripToShreds();3",4]
রেডওয়ালফ প্রোগ্রাম

তাই আমি ভুল উত্তর 0-10NaNeval(['alert("removing your computer")',2,3].join("+"))
পাই 6 কে

12

ঠিক আছে, কল্পনা করুন আপনার নীচে এই অ্যারে রয়েছে:

const arr = [1, 2, 3, 4];

আসুন এটি করার বিভিন্ন উপায়ের দিকে নজর দেওয়া শুরু করুন কারণ আমি এখানে কোনও বিস্তৃত উত্তর খুঁজে পাইনি:

1) অন্তর্নির্মিত হ্রাস ব্যবহার করে ()

function total(arr) {
  if(!Array.isArray(arr)) return;
  return arr.reduce((a, v)=>a + v);
}

2) লুপ জন্য ব্যবহার

function total(arr) {
  if(!Array.isArray(arr)) return;
  let totalNumber = 0;
  for (let i=0,l=arr.length; i<l; i++) {
     totalNumber+=arr[i];
  }
  return totalNumber;
}

3) যখন লুপ ব্যবহার

function total(arr) {
  if(!Array.isArray(arr)) return;
  let totalNumber = 0, i=-1;
  while (++i < arr.length) {
     totalNumber+=arr[i];
  }
  return totalNumber;
}

4) প্রতিটি জন্য অ্যারে ব্যবহার

function total(arr) {
  if(!Array.isArray(arr)) return;
  let sum=0;
  arr.forEach(each => {
    sum+=each;
  });
  return sum;
};

এবং এটিকে কল করুন:

total(arr); //return 10

অ্যারেতে এর মতো কিছু প্রোটোটাইপ করার পরামর্শ দেওয়া হয় না ...


10

একটি মানক জাভাস্ক্রিপ্ট সমাধান:

var addition = [];
addition.push(2);
addition.push(3);

var total = 0;
for (var i = 0; i < addition.length; i++)
{
    total += addition[i];
}
alert(total);          // Just to output an example
/* console.log(total); // Just to output an example with Firebug */

এটি আমার পক্ষে কাজ করে (ফলাফলটি 5 হওয়া উচিত)। আমি আশা করি এই ধরণের সমাধানের কোনও গোপন অসুবিধা নেই।


1
এছাড়াও, যে কোনও সি বা জাভা প্রোগ্রামার এটি বুঝতে সক্ষম হবে।
অড্রিয়াস মেসকাউকাস

সমস্ত মূল্যবোধের সংক্ষিপ্তকরণের সহজ উদ্দেশ্যে, লুপের জন্য সরল সরল
পুরাণের

কেবল সমস্যাটি হ'ল কিছুটা বিরক্ত হয় যখন আপনার কাছে 20 টি লুপের জন্য একে অপরকে
ঘিরে থাকে

7
var totally = eval(arr.join('+'))

এইভাবে আপনি অ্যারেতে সমস্ত ধরণের বিদেশী জিনিস রাখতে পারেন।

var arr = ['(1/3)','Date.now()','foo','bar()',1,2,3,4]

আমি অর্ধেক রসিকতা করছি।


26
আমি অর্ধেক হাসছি
Cob

eval(['alert("removing your computer")',2,3].join("+"))
পাই 6 কে

7

আমি জাভাস্ক্রিপ্ট এবং সাধারণভাবে কোডিংয়ের সাথে এক শিক্ষানবিস, তবে আমি দেখতে পেলাম যে অ্যারেতে সংখ্যার যোগফলের একটি সহজ এবং সহজ উপায় এই রকম:

    var myNumbers = [1,2,3,4,5]
    var total = 0;
    for(var i = 0; i < myNumbers.length; i++){
        total += myNumbers[i];
    }

মূলত, আমি এটিতে অবদান রাখতে চেয়েছিলাম কারণ আমি এমন অনেকগুলি সমাধান দেখিনি যা অন্তর্নির্মিত ফাংশনগুলি ব্যবহার করে না, এবং এই পদ্ধতিটি লিখতে ও বুঝতে সহজ।


1
এটি ২০১২ এর উত্তর বা এই 2014 এর উত্তর থেকে কীভাবে আলাদা ? দুটি সমাধান রয়েছে যা আপনি দেখেন নি।
ড্যান ড্যাসক্লেস্কু

5

জাভাস্ক্রিপ্ট কোডের একটি ছোট অংশ এই কাজটি করবে:

var numbers = [1,2,3,4];
var totalAmount = 0;

for (var x = 0; x < numbers.length; x++) {

    totalAmount += numbers[x];
}

console.log(totalAmount); //10 (1+2+3+4)

5

কিছু লোক এই .sum()পদ্ধতিতে একটি পদ্ধতি যুক্ত করার পরামর্শ দিয়েছে Array.prototype। এটি সাধারণত খারাপ অনুশীলন হিসাবে বিবেচিত হয় তাই আমি আপনাকে এটি করার পরামর্শ দিচ্ছি না।

আপনি যদি এখনও এটি করার জন্য জেদ করেন তবে এটি এটি লেখার একটি সংক্ষিপ্ত পদ্ধতি:

Array.prototype.sum = function() {return [].reduce.call(this, (a,i) => a+i, 0);}

তারপর: [1,2].sum(); // 3

নোট করুন যে প্রোটোটাইপের সাথে যুক্ত ফাংশনটি ES5 এবং ES6 ফাংশন এবং তীর সিনট্যাক্সের মিশ্রণটি ব্যবহার করছে। functionপদ্ধতি পেতে করার অনুমতি ঘোষিত হয় thisপ্রসঙ্গের Arrayআপনি যে অপারেটিং করছি। আমি কলটির =>অভ্যন্তরে ব্রেভিটির জন্য ব্যবহার করেছি reduce


5

একটি forলুপ ব্যবহার করুন :

const array = [1, 2, 3, 4];
let result = 0;

for (let i = 0; i < array.length - 1; i++) {
  result += array[i];
}

console.log(result); // Should give 10

বা এমনকি একটি forEachলুপ:

const array = [1, 2, 3, 4];
let result = 0;

array.forEach(number => {
  result += number;
})

console.log(result); // Should give 10

সরলতার জন্য, ব্যবহার করুন reduce:

const array = [10, 20, 30, 40];
const add = (a, b) => a + b
const result = array.reduce(add);

console.log(result); // Should give 100

4

দরকার নেই initial value! কারণ যদি initial valueপাস করা callback functionহয় না, তবে তালিকার প্রথম উপাদানটিতে এটি ব্যবহৃত হয় না এবং এর পরিবর্তে প্রথম উপাদানটি পাস করা হয় initial value। খুব সি ওও বৈশিষ্ট্য :)

[1, 2, 3, 4].reduce((a, x) => a + x) // 10
[1, 2, 3, 4].reduce((a, x) => a * x) // 24
[1, 2, 3, 4].reduce((a, x) => Math.max(a, x)) // 4
[1, 2, 3, 4].reduce((a, x) => Math.min(a, x)) // 1

4

এখানে একটি মার্জিত ওয়ান-লাইনারের সমাধান যা স্ট্যাক অ্যালগরিদম ব্যবহার করে , যদিও এই প্রয়োগের সৌন্দর্য বোঝার জন্য কেউ কিছু সময় নিতে পারে।

const getSum = arr => (arr.length === 1) ? arr[0] : arr.pop() + getSum(arr);

getSum([1, 2, 3, 4, 5]) //15

মূলত, ফাংশনটি একটি অ্যারে গ্রহণ করে এবং অ্যারেটিতে ঠিক একটি আইটেম রয়েছে কিনা তা যাচাই করে। মিথ্যা হলে, এটি স্ট্যাকের বাইরে শেষ আইটেমটি পপ করে এবং আপডেট করা অ্যারেটি ফিরিয়ে দেয়।

এই স্নিপেটের সৌন্দর্য হ'ল arr[0]ফাংশনটিতে অসীম লুপিং প্রতিরোধের জন্য চেক করা অন্তর্ভুক্ত । একবার এটি শেষ আইটেমে পৌঁছে গেলে এটি পুরো যোগফল দেয়।


4

আপনি ল্যাম্বদা এক্সপ্রেশন সহ হ্রাস () পদ্ধতিটি একত্রিত করতে পারেন:

[1, 2, 3, 4].reduce((accumulator, currentValue) => accumulator + currentValue);



3

সঠিকতা

অ্যারে বাছাই করুন এবং সংক্ষিপ্ত আকারের যোগফল সূচনা করুন (স্নিপেটটি ন্যানসোর্টের সাথে পার্থক্য দেখায়)

[...arr].sort((a,b)=>a-b).reduce((a,c)=>a+c,0)

সংখ্যা ব্যবহারের বহুমাত্রিক অ্যারে জন্য arr.flat(Infinity)


2

এখানে দুর্দান্ত কৌশল, আমি অ্যারের দৈর্ঘ্যটি ক্যাশে না করে প্রচুর সুরক্ষিত traditionalতিহ্যবাহী উত্তর সহ একটি নিট বাছাই পেয়েছি।

function arraySum(array){
  var total = 0,
      len = array.length;

  for (var i = 0; i < len; i++){
    total += array[i];
  }

  return total;
};

var my_array = [1,2,3,4];

// Returns 10
console.log( arraySum( my_array ) );

অ্যারের দৈর্ঘ্যটি ক্যাচ না করে জেএস সংকলকটির দৈর্ঘ্য গণনা করতে লুপের প্রতিটি পুনরাবৃত্তির সাথে অ্যারের মধ্য দিয়ে যেতে হবে, বেশিরভাগ ক্ষেত্রে এটি অপ্রয়োজনীয় ওভারহেড। ভি 8 এবং অনেকগুলি আধুনিক ব্রাউজার আমাদের জন্য এটি অনুকূল করে তোলে, তাই এটি তখন উদ্বেগের মতো কম নয় তবে এমন পুরানো ডিভাইস রয়েছে যা এই সাধারণ ক্যাচিং থেকে উপকৃত হয়।

দৈর্ঘ্য যদি পরিবর্তনের বিষয় হয় তবে কেন আপনি দৈর্ঘ্যটি ক্যাশে করছেন সম্পর্কে অজানা থাকলে ক্যাশিংয়ের ফলে কিছু অপ্রত্যাশিত পার্শ্ব প্রতিক্রিয়া দেখা দিতে পারে তবে পুনরায় ব্যবহারযোগ্য ফাংশনের জন্য যার একমাত্র উদ্দেশ্য অ্যারে নেওয়া এবং মানগুলি একসাথে যুক্ত করা এটি একটি দুর্দান্ত ফিট

এই অ্যারেসাম ফাংশনের জন্য এখানে একটি কোডপেন লিঙ্ক। http://codepen.io/brandonbrule/pen/ZGEJyV

এটি আমার সাথে আটকে থাকা এটি একটি পুরানো মানসিকতা, তবে এই প্রসঙ্গে এটি ব্যবহার করার কোনও অসুবিধা আমি দেখতে পাচ্ছি না।


দৈর্ঘ্যটি ক্যাশে করার বিষয়টি একটি লাল হেরিং। জেএস ইঞ্জিনগুলি এটি ঝলকানো ছাড়াই আপনার জন্য অনুকূল করে তুলবে।

2

এগুলি সত্যিই দুর্দান্ত উত্তর, তবে কেবল যদি সংখ্যাগুলি প্রশ্নের মতো ক্রমানুসারে থাকে (1,2,3,4) আপনি সূত্র (এন * (এন + 1)) / 2 প্রয়োগ করে সহজেই এটি করতে পারেন যেখানে n হ'ল শেষ সংখ্যা


2
Object.defineProperty(Object.prototype, 'sum', {
    enumerable:false,
    value:function() {
        var t=0;for(var i in this)
            if (!isNaN(this[i]))
                t+=this[i];
        return t;
    }
});

[20,25,27.1].sum()                 // 72.1
[10,"forty-two",23].sum()          // 33
[Math.PI,0,-1,1].sum()             // 3.141592653589793
[Math.PI,Math.E,-1000000000].sum() // -999999994.1401255

o = {a:1,b:31,c:"roffelz",someOtherProperty:21.52}
console.log(o.sum());              // 53.519999999999996

এই কোডটি কি আপনার অপারেটিং সিস্টেমটি সরিয়ে দেয়? নাকি এটি আপনার ব্যক্তিগত তথ্য আমার কাছে প্রেরণ করে?


2

একটি সাধারণ পদ্ধতির উদাহরণ:

function add(array){
    var arraylength = array.length;
    var sum = 0;
    for(var timesToMultiply = 0; timesToMultiply<arraylength; timesToMultiply++){
        sum += array[timesToMultiply];
    }

    return sum;
}

console.log(add([1, 2, 3, 4]));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.