জাভাস্ক্রিপ্ট বস্তুর অ্যারে হ্রাস


225

বলুন যে আমি a.xপ্রতিটি উপাদানের যোগফল করতে চাই arr

arr = [{x:1},{x:2},{x:4}]
arr.reduce(function(a,b){return a.x + b.x})
>> NaN

আমার বিশ্বাস রয়েছে যে কুঠারটি কোনও এক সময় অপরিবর্তিত রয়েছে।

নিম্নলিখিতটি ঠিক কাজ করে

arr = [1,2,4]
arr.reduce(function(a,b){return a + b})
>> 7

প্রথম উদাহরণে আমি কী ভুল করছি?


1
এছাড়াও, আমি মনে করি আপনি arr.reduce(function(a,b){return a + b})দ্বিতীয় উদাহরণটিতে বোঝাতে চাইছেন ।
জ্যামি ওয়াং

1
সংশোধনীর জন্য ধন্যবাদ. আমি এখানে হ্রাস করতে
পেরেছি

6
@ জ্যামি ওয়াং আসলে এটি জাভাস্ক্রিপ্ট ১.৮ এর একটি অংশ
জারেডম্যাকএটিয়ার

@ অরিজিনালসেন হ্যাঁ - ঠিক তা দেখেছেন। আকর্ষণীয়, তবে যেহেতু এটির পুরো দেশীয় সমর্থন নেই, তাই এই জাতীয় প্রশ্নের উত্তর দেওয়ার পরেও বাস্তবায়নটি গুরুত্বপূর্ণ।
জ্যামি ওয়াং

3
জাভাস্ক্রিপ্ট সংস্করণগুলি ফায়ারফক্স ইন্টারপ্রেটারের কেবলমাত্র সংস্করণ, এটি তাদের রেফারেন্সে বিভ্রান্ত করছে। এখানে কেবল ES3 এবং ES5 রয়েছে।
রায়নস

উত্তর:


279

প্রথম পুনরাবৃত্তির পর একটি সংখ্যা ফেরার এবং তারপর সম্পত্তি পেতে চেষ্টা your're xপরবর্তী বস্তু যা যোগ করতে এটি undefinedএবং জড়িত গণিতশাস্ত্র undefinedফলাফল NaN

xপরামিতিগুলির x বৈশিষ্ট্যের যোগফল সহ কোনও বস্তু ফেরত দেওয়ার চেষ্টা করুন :

var arr = [{x:1},{x:2},{x:4}];

arr.reduce(function (a, b) {
  return {x: a.x + b.x}; // returns object with property x
})

// ES6
arr.reduce((a, b) => ({x: a.x + b.x}));

// -> {x: 7}

মন্তব্য থেকে ব্যাখ্যা যোগ করা হয়েছে:

পরবর্তী পুনরাবৃত্তিতে চলক [].reduceহিসাবে ব্যবহৃত প্রতিটি পুনরাবৃত্তির রিটার্ন মান a

পুনরাবৃত্তির 1: a = {x:1}, b = {x:2}, {x: 3}নির্ধারিত aপুনরাবৃত্তির 2

Iteration 2: a = {x:3}, b = {x:4}

আপনার উদাহরণের সাথে সমস্যাটি হ'ল আপনি সংখ্যায় আক্ষরিক ফিরে আসছেন।

function (a, b) {
  return a.x + b.x; // returns number literal
}

পুনরাবৃত্তির 1: a = {x:1}, b = {x:2}, // returns 3যেমন aপরবর্তী পুনরাবৃত্তিতে

পুনরাবৃত্তির 2: a = 3, b = {x:2}আয়NaN

সংখ্যার আক্ষরিকের 3(সাধারণত) কোনও সম্পত্তি থাকে না xতাই এটি হয় undefinedএবং undefined + b.xফিরে আসে NaNএবং NaN + <anything>সর্বদা থাকেNaN

স্পেসিফিকেশন : আমি এই থ্রেডের অন্যান্য শীর্ষ উত্তরের চেয়ে আমার পদ্ধতিটিকে প্রাধান্য দিচ্ছি কারণ আমি এই ধারণাটির সাথে একমত নই যে কোনও নম্বর আদিম বের করার জন্য একটি যাদু সংখ্যার সাথে হ্রাস করার জন্য একটি alচ্ছিক পরামিতি পাস করা ক্লিনার। এটি কম লিখিত লিখিত হতে পারে তবে ইমো এটি কম পঠনযোগ্য।


7
অ্যারেতে প্রতিটি উপাদানের ক্রিয়াকলাপ সম্পাদন করতে অবশ্যই কোনও ফাংশন গ্রহণ করা নিশ্চিত করুন। প্রতিবার এটি কোনও মান প্রদান করে যা অপারেশনে পরবর্তী 'এ' ভেরিয়েবল হিসাবে ব্যবহৃত হয়। সুতরাং প্রথম পুনরাবৃত্তি a = {x: 1}, b = {x: 2} তারপরে দ্বিতীয় পুনরাবৃত্তি a = {x: 3} (প্রথম পুনরাবৃত্তির সম্মিলিত মান), বি = {x: 4}} দ্বিতীয় পুনরাবৃত্তিতে এটি উদাহরণস্বরূপ যে সমস্যাটি এটি x.x + বিএক্স যোগ করার চেষ্টা করেছিল, 3 এর x নামক সম্পত্তি নেই তাই এটি
অপরিজ্ঞাত হয়ে

আমি ব্যাখ্যাটি বুঝতে পেরেছি, তবে আমি এখনও দেখতে পাচ্ছি না যে {x: ... ite পুনরাবৃত্তির 2 কে কুড়াল থেকে বাধা দেয়? এই এক্স কি বোঝায়? আমি এই পদ্ধতিটি একটি পদ্ধতির সাহায্যে ব্যবহার করার চেষ্টা করেছি, এবং কাজ করছে না বলে মনে হচ্ছে
ম্যাক

প্রকৃতপক্ষে, কেবল স্ট্যাকওভারফ্লো / প্রশ্নগুলি / ২১১৮১২৩৩/২ পড়ুন এবং এটি কীভাবে কাজ করে তা বুঝতে পারেন .. তবে যখন আপনার কোনও পদ্ধতি রয়েছে তখন কেবল সরল বৈশিষ্ট্যগুলি না রেখে আপনি কীভাবে এটি করবেন?
এমপি

278

এটি সম্পাদন করার একটি পরিষ্কার উপায় হল প্রাথমিক মান সরবরাহ করে:

var arr = [{x:1}, {x:2}, {x:4}];
arr.reduce(function (acc, obj) { return acc + obj.x; }, 0); // 7
console.log(arr);

প্রথমবার বেনামে ফাংশনটি বলা হয়, এটি কল হয়ে (0, {x: 1})ফিরে আসে 0 + 1 = 1। পরের বার, এটি সাথে ডেকে (1, {x: 2})ফিরে আসে 1 + 2 = 3। এটা তোলে তারপর বলা হচ্ছে (3, {x: 4}), অবশেষে ফিরে 7


1
প্রাথমিক সমাধান (হ্রাসের দ্বিতীয় প্যারামিটার)
টিজে

থ্যাঙ্কস, আমি দ্বিতীয় যুক্তির সাথে ইঙ্গিতটির সন্ধান করছিলাম reduce
নিলসোল

এটি স্বীকৃত উত্তরের চেয়ে কম কোড এবং আরও প্রত্যক্ষ - কোনও উপায় আছে যার মধ্যে গৃহীত উত্তর এর চেয়ে ভাল?
jbyrd

1
যখন অ্যারের দৈর্ঘ্য কখনও কখনও কেবল 1 হয় তখন এটি আমাকে কেস নিতে সহায়তা করেছিল।
হুসিএনকে

1
es6 উপায় ভের অ্যারে = [{x: 1}, {x: 2}, {x: 4}]; যাক a = arr.reduce ((acc, obj) => acc + obj.x, 0); console.log (ক);
অমর ঘোদকে

76

টিএল; ডিআর, প্রাথমিক মান নির্ধারণ করুন

ধ্বংসাত্মক ব্যবহার করে

arr.reduce( ( sum, { x } ) => sum + x , 0)

ধ্বংস না করেই

arr.reduce( ( sum , cur ) => sum + cur.x , 0)

টাইপস্ক্রিপ্ট সহ

arr.reduce( ( sum, { x } : { x: number } ) => sum + x , 0)

আসুন ধ্বংসাত্মক পদ্ধতিটি চেষ্টা করুন:

const arr = [ { x: 1 }, { x: 2 }, { x: 4 } ]
const result = arr.reduce( ( sum, { x } ) => sum + x , 0)
console.log( result ) // 7

এটির মূলটি প্রাথমিক মান সেট করে setting রিটার্ন মান পরবর্তী পুনরাবৃত্তির প্রথম প্যারামিটারে পরিণত হয়।

শীর্ষ উত্তরে ব্যবহৃত প্রযুক্তিটি মুশকিল নয়

গৃহীত উত্তরটি "alচ্ছিক" মানটি পাস না করার প্রস্তাব দেয়। এটি ভুল, কারণ মূর্খতাপূর্ণ উপায় হ'ল দ্বিতীয় প্যারামিটারটি সর্বদা অন্তর্ভুক্ত থাকে। কেন? তিনটি কারণ:

1. বিপজ্জনক - প্রাথমিক মানটি পাস না করা বিপজ্জনক এবং যদি কলব্যাকের কাজটি অসাবধান থাকে তবে পার্শ্ব-প্রতিক্রিয়া এবং মিউটেশন তৈরি করতে পারে।

দেখ

const badCallback = (a,i) => Object.assign(a,i) 

const foo = [ { a: 1 }, { b: 2 }, { c: 3 } ]
const bar = foo.reduce( badCallback )  // bad use of Object.assign
// Look, we've tampered with the original array
foo //  [ { a: 1, b: 2, c: 3 }, { b: 2 }, { c: 3 } ]

তবে যদি আমরা প্রাথমিক মান সহ এটি এভাবেই করতাম:

const bar = foo.reduce( badCallback, {})
// foo is still OK
foo // { a: 1, b: 2, c: 3 }

রেকর্ডের জন্য, যদি না আপনি মূল অবজেক্টটিকে রূপান্তর করতে চান তবে Object.assignখালি অবজেক্টের প্রথম প্যারামিটার সেট করুন । ভালো: Object.assign({}, a, b, c)

2 - আরও ভাল টাইপ অনুমান - যখন টাইপস্ক্রিপ্টের মতো কোনও সরঞ্জাম বা ভিএস কোডের মতো সম্পাদক ব্যবহার করার সময় আপনি সংকলকটিকে প্রাথমিক বলার সুবিধা পাবেন এবং এটি ভুল করে রাখলে এটি ত্রুটিগুলি ধরতে পারে। আপনি যদি প্রাথমিক মানটি সেট না করেন তবে অনেক পরিস্থিতিতে এটি অনুমান করতে সক্ষম নাও হতে পারে এবং আপনি ক্রাইপি রানটাইমের ত্রুটিগুলি সহ শেষ করতে পারেন।

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

এর সম্পর্কে অন্যভাবে চিন্তা করা যাক। জাভাস্ক্রিপ্টে, ফাংশনগুলি ডেটার মতো ঘুরতে পারে, কলব্যাকগুলি এভাবেই কাজ করে, নিম্নলিখিত কোডটির ফলাফল কী?

[1,2,3].reduce(callback)

এটি একটি নম্বর ফেরত দেবে? একটি অবজেক্ট? এটি এটি পরিষ্কার করে তোলে

[1,2,3].reduce(callback,0)

ফাংশনাল প্রোগ্রামিং স্পেক সম্পর্কে এখানে আরও পড়ুন: https://github.com/fantasyland/fantasy-land#foldable

আরও কিছু পটভূমি

reduceপদ্ধতি দুটি প্যারামিটার নেয়,

Array.prototype.reduce( callback, initialItem )

callbackফাংশন নিম্নলিখিত পরামিতিগুলি লাগে

(accumulator, itemInArray, indexInArray, entireArray) => { /* do stuff */ }

প্রথম পুনরাবৃত্তির জন্য,

  • যদি সরবরাহ করা initialItemহয় তবে reduceফাংশনটি অ্যারের প্রথম আইটেম initialItemহিসাবে পাস accumulatorকরে itemInArray

  • যদি initialItemহয় না প্রদত্ত reduceফাংশন হিসাবে অ্যারের মধ্যে প্রথম আইটেম পাসের initialItemএবং অ্যারে হিসাবে দ্বিতীয় আইটেমটি itemInArrayযা আচরণ বিভ্রান্তিকর হতে পারে।

আমি সর্বদা হ্রাসের প্রাথমিক মানটি সেট করা শেখাই এবং সুপারিশ করি।

আপনি এখানে ডকুমেন্টেশন চেক আউট করতে পারেন:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

আশাকরি এটা সাহায্য করবে!


1
ধ্বংসাত্মক জিনিস আমি যা চেয়েছিলাম ঠিক তেমন। একটি যাদুমন্ত্র মত কাজ করে. ধন্যবাদ!
আলেকসান্ডার

24

অন্যরা এই প্রশ্নের উত্তর দিয়েছেন, তবে আমি ভেবেছিলাম যে আমি অন্য পদ্ধতিতে টস করব। সরাসরি সংক্ষিপ্ত কুড়ালে যাওয়ার পরিবর্তে, আপনি একটি মানচিত্র (কুড়াল থেকে এক্স পর্যন্ত) একত্রিত করতে পারেন এবং x এর যোগ করতে পারেন:

arr = [{x:1},{x:2},{x:4}]
arr.map(function(a) {return a.x;})
   .reduce(function(a,b) {return a + b;});

স্বীকার করা, এটি সম্ভবত কিছুটা ধীর হতে চলেছে, তবে আমি এটি একটি বিকল্প হিসাবে এটি উল্লেখ করার উপযুক্ত বলে মনে করি।


8

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

function reducer (accumulator: X, currentValue: Y): X { }

মানে যে হ্রাসকারক চাহিদা লাশ রূপান্তর সম্পর্কে করা যে currentValueএবং বর্তমান মান accumulatorনতুন মান accumulator

যোগ করার সময় এটি একটি সরল উপায়ে কাজ করে, কারণ আহরণকারী এবং উপাদানগুলির মান উভয়ই একই ধরণের হয়ে থাকে (তবে বিভিন্ন উদ্দেশ্যে পরিবেশন করে)।

[1, 2, 3].reduce((x, y) => x + y);

এটি কেবল কাজ করে কারণ তারা সমস্ত সংখ্যা।

[{ age: 5 }, { age: 2 }, { age: 8 }]
  .reduce((total, thing) => total + thing.age, 0);

এখন আমরা একত্রিতকারীকে একটি প্রাথমিক মান দিচ্ছি। প্রারম্ভিক মানটি সেই ধরণের হওয়া উচিত যা আপনি সমষ্টিটির প্রত্যাশা করেন (যে ধরণের আপনি চূড়ান্ত মান হিসাবে প্রত্যাশিত হন), বেশিরভাগ ক্ষেত্রেই। আপনি যখন এটি করতে বাধ্য হন না (এবং এমনটি হওয়া উচিত নয়) তবে এটি মনে রাখা গুরুত্বপূর্ণ।

একবার আপনি এটি জানেন, আপনি অন্যান্য এন: 1 সম্পর্কের সমস্যার জন্য অর্থপূর্ণ হ্রাস লিখতে পারেন।

পুনরাবৃত্তি শব্দ অপসারণ:

const skipIfAlreadyFound = (words, word) => words.includes(word)
    ? words
    : words.concat(word);

const deduplicatedWords = aBunchOfWords.reduce(skipIfAlreadyFound, []);

পাওয়া সমস্ত শব্দের একটি গণনা প্রদান:

const incrementWordCount = (counts, word) => {
  counts[word] = (counts[word] || 0) + 1;
  return counts;
};
const wordCounts = words.reduce(incrementWordCount, { });

একক ফ্ল্যাট অ্যারেতে অ্যারের অ্যারে হ্রাস করা:

const concat = (a, b) => a.concat(b);

const numbers = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
].reduce(concat, []);

আপনি যে কোনও সময় অ্যারে থেকে কোনও একক মানের যে 1: 1 এর সাথে মেলে না তার দিকে যেতে চেয়েছেন, হ্রাস হ'ল এমন কিছু যা আপনি বিবেচনা করতে পারেন।

আসলে, মানচিত্র এবং ফিল্টার উভয়ই হ্রাস হিসাবে প্রয়োগ করা যেতে পারে:

const map = (transform, array) =>
  array.reduce((list, el) => list.concat(transform(el)), []);

const filter = (predicate, array) => array.reduce(
  (list, el) => predicate(el) ? list.concat(el) : list,
  []
);

আমি আশা করি এটি কীভাবে ব্যবহার করবেন সে সম্পর্কে আরও কিছু প্রসঙ্গ সরবরাহ করে reduce

এর সাথে যুক্ত হওয়াটি, যা আমি এখনও ভাঙি নি, যখন এমন প্রত্যাশা থাকে যে ইনপুট এবং আউটপুট প্রকারগুলি নির্দিষ্টভাবে গতিশীল হতে পারে, কারণ অ্যারের উপাদানগুলি হ'ল:

const compose = (...fns) => x =>
  fns.reduceRight((x, f) => f(x), x);

const hgfx = h(g(f(x)));
const hgf = compose(h, g, f);
const hgfy = hgf(y);
const hgfz = hgf(z);

1
টাইপ সিস্টেমের ক্ষেত্রে এটি পরিষ্কারভাবে ব্যাখ্যা করার জন্য +1। ওটো, আমি এই ধারণাটি উদ্বোধন করে মনে করি যে এটি একটি
ছদ্মবেশবাদ অনেকের কাছেই সমালোচিত

6

প্রথম পুনরাবৃত্তির জন্য 'ক' অ্যারের মধ্যে প্রথম অবজেক্ট হবে, সুতরাং কুঠার + বিএক্স ১ + ২ অর্থাৎ 3 ফিরে আসবে এনএএন দেবে।

সহজ সমাধানটি প্রথমে অ্যারেগুলিতে নম্বরগুলি ম্যাপিং এবং তারপরে নীচের মত হ্রাস করা হয়:

arr.map(a=>a.x).reduce(function(a,b){return a+b})

এখানে arr.map(a=>a.x)এখন [1,2,4] সংখ্যা ব্যবহার করে একটি অ্যারে সরবরাহ করবে.reduce(function(a,b){return a+b}) হবে সহজেই কোনও সংখ্যা ছাড়াই এই সংখ্যাগুলি যুক্ত করবে using

আর একটি সহজ সমাধান হ'ল শূন্য হিসাবে একটি প্রাথমিক যোগান প্রদান নীচে 0 থেকে 'এ' বরাদ্দ করে:

arr.reduce(function(a,b){return a + b.x},0)

5

আপনার হ্রাসের প্রতিটি পদক্ষেপে আপনি কোনও নতুন {x:???}অবজেক্ট ফিরিয়ে দিচ্ছেন না । সুতরাং আপনার হয় হয়:

arr = [{x:1},{x:2},{x:4}]
arr.reduce(function(a,b){return a + b.x})

বা আপনার করা দরকার

arr = [{x:1},{x:2},{x:4}]
arr.reduce(function(a,b){return {x: a.x + b.x}; }) 

3
প্রথম উদাহরণটির জন্য একটি ডিফল্ট মান প্রয়োজন (যেমন 0) অন্যথায় "এ" প্রথম পুনরাবৃত্তিতে অপরিজ্ঞাত।
গ্রিফিন

2

প্রথম ধাপে, এটি সূক্ষ্মভাবে কাজ করবে কারণ এর মান 1 aহবে এবং এটির মান 2 হবে bতবে 2 + 1 হিসাবে ফিরে আসবে এবং পরবর্তী ধাপে এর মান bহবে ফেরতের মান from step 1 i.e 3এবং তাই অপরিবর্তিত b.xথাকবে .. .আর অপরিজ্ঞাপিত + যে কোনও নম্বর ন্যাএন হবে এবং সে কারণেই আপনি সেই ফলাফলটি পাচ্ছেন।

পরিবর্তে আপনি শূন্য হিসাবে প্রাথমিক মান দিয়ে এটি চেষ্টা করতে পারেন

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


অন্যদের থেকে আপনার দৃষ্টিভঙ্গি কীভাবে আলাদা তা দেখানোর জন্য দয়া করে এটি আপডেট করুন।
kwelch

2

আপনার যদি প্রচুর ডেটা সহ একটি জটিল অবজেক্ট থাকে তবে অবজেক্টগুলির অ্যারের মতো, আপনি এটিকে সমাধান করার জন্য ধাপে ধাপে পদক্ষেপ নিতে পারেন।

যেমন:

const myArray = [{ id: 1, value: 10}, { id: 2, value: 20}];

প্রথমত, আপনার নিজের অ্যারেটিকে আপনার আগ্রহের একটি নতুন অ্যারে হিসাবে মানচিত্র করা উচিত, এটি উদাহরণের মধ্যে নতুন মানের অ্যারে হতে পারে।

const values = myArray.map(obj => obj.value);

এই কল ব্যাক ফাংশনটি মূল অ্যারে থেকে কেবলমাত্র মান যুক্ত করে একটি নতুন অ্যারে প্রদান করবে এবং মান কনস্টে এটি সঞ্চয় করবে। এখন আপনার মানগুলি এই জাতীয় অ্যারে:

values = [10, 20];

এবং এখন আপনি আপনার হ্রাস সম্পাদন করতে প্রস্তুত:

const sum = values.reduce((accumulator, currentValue) => { return accumulator + currentValue; } , 0);

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

এখন আপনার 30 টির মান সহ নতুন কনস্টের সমষ্টি হবে।


0

একটি সংগ্রহের উপর ফাংশন পুনরাবৃত্তি হ্রাস

arr = [{x:1},{x:2},{x:4}] // is a collection

arr.reduce(function(a,b){return a.x + b.x})

অনুবাদ:

arr.reduce(
    //for each index in the collection, this callback function is called
  function (
    a, //a = accumulator ,during each callback , value of accumulator is 
         passed inside the variable "a"
    b, //currentValue , for ex currentValue is {x:1} in 1st callback
    currentIndex,
    array
  ) {
    return a.x + b.x; 
  },
  accumulator // this is returned at the end of arr.reduce call 
    //accumulator = returned value i.e return a.x + b.x  in each callback. 
);

প্রতিটি ইনডেক্স কলব্যাক চলাকালীন, ভেরিয়েবল "অ্যাসোকুলেটর" এর মান কলব্যাক ফাংশনে "একটি" প্যারামিটারে চলে যায়। আমরা যদি "সংযোজক" আরম্ভ না করি, তবে এর মানটি সংজ্ঞায়িত হবে। অপরিজ্ঞাত.এক্স কল করা আপনাকে ত্রুটি দেয়।

এটি সমাধানের জন্য, কেসির উত্তর উপরের হিসাবে দেখানো হয়েছে বলে মান 0 দিয়ে "সঞ্চয়কারী" আরম্ভ করুন ।

"হ্রাস" ফাংশনের আউট আউটগুলি বুঝতে, আমি আপনাকে এই ফাংশনের উত্স কোডটি দেখে পরামর্শ দেব suggest লোডাশ লাইব্রেরিতে ফাংশন হ্রাস করা হয়েছে যা ES6 এর "হ্রাস" ফাংশনের মতো কাজ করে।

এখানে লিঙ্কটি রয়েছে: উত্স কোড হ্রাস করুন


0

সমস্ত xপ্রপসের যোগফল ফেরত দিতে :

arr.reduce(
(a,b) => (a.x || a) + b.x 
)

3
এই উত্তরটি কেন আরও ভাল সে সম্পর্কে প্রসঙ্গ সরবরাহ করা হলে অন্য গৃহীত বা আপোক্ত হওয়া ব্যবহারকারীরা যখন তাদের প্রশ্নের সমাধান খুঁজছেন তখন তাদের সহায়তা করতে পারে।
অ্যান্ড্রু

0

আপনি মানচিত্রটি ব্যবহার করতে পারেন এবং কার্যগুলি হ্রাস করতে পারেন

const arr = [{x:1},{x:2},{x:4}];
const sum = arr.map(n => n.x).reduce((a, b) => a + b, 0);

-1

অ্যারে হ্রাস ফাংশনটিতে তিনটি প্যারামিটার থাকে, যেমন, প্রাথমিকের মান (এটি 0 ডিফল্ট হয়), সঞ্চায়ক এবং বর্তমান মান। ডিফল্টরূপে প্রাথমিকের মান "0" হবে be যা সংগ্রহকারী দ্বারা নেওয়া হয়

কোডে এটি দেখতে দিন।

var arr =[1,2,4] ;
arr.reduce((acc,currVal) => acc + currVal ) ; 
// (remember Initialvalue is 0 by default )

//first iteration** : 0 +1 => Now accumulator =1;
//second iteration** : 1 +2 => Now accumulator =3;
//third iteration** : 3 + 4 => Now accumulator = 7;
No more array properties now the loop breaks .
// solution = 7

প্রাথমিক মান সহ এখন একই উদাহরণ:

var initialValue = 10;
var arr =[1,2,4] ;
arr.reduce((acc,currVal) => acc + currVal,initialValue ) ; 
/
// (remember Initialvalue is 0 by default but now it's 10 )

//first iteration** : 10 +1 => Now accumulator =11;
//second iteration** : 11 +2 => Now accumulator =13;
//third iteration** : 13 + 4 => Now accumulator = 17;
No more array properties now the loop breaks .
//solution=17

একই জিনিসটি অ্যারেগুলির জন্যও প্রযোজ্য (বর্তমান স্ট্যাকওভারফ্লো প্রশ্ন):

var arr = [{x:1},{x:2},{x:4}]
arr.reduce(function(acc,currVal){return acc + currVal.x}) 
// destructing {x:1} = currVal;
Now currVal is object which have all the object properties .So now 
currVal.x=>1 
//first iteration** : 0 +1 => Now accumulator =1;
//second iteration** : 1 +2 => Now accumulator =3;
//third iteration** : 3 + 4 => Now accumulator = 7;
No more array properties now the loop breaks 
//solution=7

মাইন্ডে বহন করার এক জিনিস হ'ল ডিফল্টরূপে প্রাথমিক মূল্য 0 হয় এবং আমার অর্থ 0 and, [] এবং নম্বর কিছু দেওয়া যায়



-2

আপনার সঞ্চয়ের জন্য কুঠার ব্যবহার করা উচিত নয়, পরিবর্তে আপনি এটি `আরার = [{x: 1}, {x: 2}, {x: 4}] এর মতো করতে পারেন

অ্যারিড্রেস (ফাংশন (ক, খ) {এ + বিএক্স}, ০) `

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.