জাভাস্ক্রিপ্টে একটি অ্যারের সর্বনিম্ন / সর্বোচ্চ উপাদান সন্ধান করুন


777

আমি কীভাবে সহজেই কোনও জাভাস্ক্রিপ্ট অ্যারের ন্যূনতম বা সর্বোচ্চ উপাদানটি পেতে পারি?

উদাহরণসুডোকোড:

let array = [100, 0, 50]

array.min() //=> 0
array.max() //=> 100

93
দ্রষ্টব্য: এর নাম ECMAScript 6 আপনি নতুন ব্যবহার করতে পারেন বিস্তার অপারেটর : (তিনটি বিন্দু ...সহ) Math.max()ভালো: Math.max(...[2, 5, 16, 1])আমার উত্তর এমডিএন ডকুমেন্টেশন থেকে তৈরি দেখুন ।
টটিমেডলি

1
গ্রহণযোগ্য হিসাবে একটি উত্তর চিহ্নিত করার বিবেচনা করুন।
অ্যালেক্স

এটি করার সর্বাধিক সাধারণ পদ্ধতির সাথে গতির তুলনা করার জন্য একটি মানদণ্ড এখানে রয়েছে: jsben.ch/#/1QuTg
EscapeNetscape

এস 6 মূলত দুর্দান্ত! :)
ডাটদিনহোকোক

ইএস 6 ছাড়াই Math.max.apply(null, [2,5,16,1])
টোমর

উত্তর:


826

বিল্ট-ইন অ্যারে অবজেক্টটি ব্যবহার Math.max/ Math.minপরিবর্তে বাড়ানোর বিষয়ে :

Array.prototype.max = function() {
  return Math.max.apply(null, this);
};

Array.prototype.min = function() {
  return Math.min.apply(null, this);
};

এখানে একটি জেএসফিডাল

বিল্ট-ইনগুলিকে সংযোজন করা অন্যান্য লাইব্রেরির সাথে সংঘর্ষের কারণ হতে পারে (কিছু দেখুন), যাতে আপনি সরাসরি আপনার অ্যারেতে সরাসরি apply'প্রবেশ করানোতে আরও স্বাচ্ছন্দ্যবোধ করতে পারেন Math.xxx():

var min = Math.min.apply(null, arr),
    max = Math.max.apply(null, arr);

পর্যায়ক্রমে, ধরে নিলে আপনার ব্রাউজারটি ECMAScript 6 সমর্থন করে, আপনি স্প্রেড অপারেটরটি ব্যবহার করতে পারেন যা applyপদ্ধতির অনুরূপ কাজ করে :

var min = Math.min( ...arr ),
    max = Math.max( ...arr );

8
@ হ্যাঙ্কএইচ: পাস করা nullবা Mathবা {}যা কিছু apply()বা call()তার ফলাফলের কোনও ফল নেই। অভ্যন্তরীণভাবে Math.maxউল্লেখ করা উচিত নয় বা করা উচিত নয় this
রোয়াতিন মার্থ

31
একজন সি # প্রোগ্রামার হিসাবে আমার জোরালোভাবে টাইপ করা প্রশ্ন দরকার।
কেওসপ্যান্ডিয়ন

7
উপরের কোডটি দিয়ে আমি কেবল একটি jQuery ভুল ভাগ করে নিচ্ছি যা আমাকে ডিবাগ করতে দীর্ঘ সময় নিয়েছিল। একটি jquery অ্যারে আইপ্যাড ব্যতীত সব কিছুতে দুর্দান্ত কাজ করে। অ্যারেটি কাজ করার জন্য আমাকে সত্যিকারের নেটিভ অ্যারেতে রূপান্তর করতে হয়েছিল। শুধুমাত্র কোনও কারণে একক ডিভাইসকে প্রভাবিত করেছেMath.max.apply(null, $.makeArray(array));
ফরেস্ট

11
আমি হ্রাস পেয়েছি, কারণ প্রস্তাবিত পদ্ধতি স্ট্যাক ফ্রেমে ও (এন) মেমরি গ্রাস করে এবং ফলস্বরূপ বড় অ্যারেগুলিতে ক্রাশ হয়। আমার ক্ষেত্রে নোডেজ ক্র্যাশ করার জন্য প্রায় 130000 সংখ্যা যথেষ্ট ছিল।
আলেক্সি টিমানভস্কি

14
বিল্ট-ইন প্রোটোটাইপগুলি এর মতো বাড়িয়ে দেবেন না। এটি কেবল অন্যান্য গ্রন্থাগারের সাথে বিরোধের বিষয় নয়; এটি ব্রাউজার নিজেই ভবিষ্যতে কোনও পদ্ধতি .maxবা .minপদ্ধতি সরবরাহ করে এমন সম্ভাবনার বিষয়েও । পুরোপুরি বাস্তবসম্মত দৃশ্য: আপনি এই উত্তরটি ব্যবহার করেন। 2016 সালে, ES7 বা ES8 টিপ Array.maxএবং Array.min। এই সংস্করণটির বিপরীতে, তারা স্ট্রিংগুলিতে কাজ করে। আপনার ভবিষ্যতের সহকর্মী এখন-ভালভাবে নথিভুক্ত নেটিভ .max()পদ্ধতিতে অ্যারেতে বর্ণমালা-সর্বশেষতম স্ট্রিংটি পাওয়ার চেষ্টা করে , তবে রহস্যজনকভাবে পান NaN। কয়েক ঘন্টা পরে, তিনি এই কোডটি খুঁজে পান, একটি চালান git blame, এবং আপনার নামটি অভিশাপ দেয়।
মার্ক অ্যামেরি

362
var max_of_array = Math.max.apply(Math, array);

সম্পূর্ণ আলোচনার জন্য দেখুন: http://aaroncrane.co.uk/2008/11/ জাভাস্ক্রিপ্ট_ম্যাক্স_পি /


13
মধ্যে পার্থক্য কি Math.max.apply(Math, array)এবং Math.max.apply(null, array)? ব্লগটি বলে ... "... আপনাকেও পুনর্নির্বাচিতভাবে আবার বলতে হবে maxযা এর সাথে সম্পর্কিত Math...", তবে মনে হয় এটি করার দরকার নেই ( applyহিসাবে প্রথম যুক্তিটি সেট করে null)।
ziyuang

9
@ziyuang যখন আপনি এটা পছন্দ কল Math.max(a,b), Mathযেমন পাস করা হয়েছে thisমান, তাই এটি যখন সঙ্গে কলিং একই কাজ করতে জানার জন্য হতে পারে apply। তবে মানটি Math.maxব্যবহার করে না this, তাই আপনি যে মানটি চান তা পাস করতে পারেন।
ওরিওল

199

বড় অ্যারেগুলির জন্য (~ 10⁷ উপাদান) Math.minএবং Math.maxউভয়ই নোড.জেএস-এ নিম্নলিখিত ত্রুটিটি উত্পন্ন করে produces

রেঞ্জেরর: সর্বোচ্চ কল স্ট্যাকের আকার অতিক্রম করেছে

আরও শক্তিশালী সমাধান হ'ল কল স্ট্যাকটিতে প্রতিটি উপাদান যুক্ত না করে পরিবর্তে একটি অ্যারে পাস করা:

function arrayMin(arr) {
  return arr.reduce(function (p, v) {
    return ( p < v ? p : v );
  });
}

function arrayMax(arr) {
  return arr.reduce(function (p, v) {
    return ( p > v ? p : v );
  });
}

আপনি যদি গতি সম্পর্কে উদ্বিগ্ন হন তবে নিম্নলিখিত কোডটি ~ 3 গুণ দ্রুত হয় তবে Math.max.applyআমার কম্পিউটারে। Http://jsperf.com/min-and-max-in-array/2 দেখুন ।

function arrayMin(arr) {
  var len = arr.length, min = Infinity;
  while (len--) {
    if (arr[len] < min) {
      min = arr[len];
    }
  }
  return min;
};

function arrayMax(arr) {
  var len = arr.length, max = -Infinity;
  while (len--) {
    if (arr[len] > max) {
      max = arr[len];
    }
  }
  return max;
};

যদি আপনার অ্যারেতে সংখ্যার পরিবর্তে স্ট্রিং থাকে তবে আপনাকে এগুলিকে সংখ্যায় জোর করাও দরকার। নীচের কোডটি তা করে তবে এটি আমার মেশিনে কোডটি ~ 10 বার কমিয়ে দেয়। Http://jsperf.com/min-and-max-in-array/3 দেখুন ।

function arrayMin(arr) {
  var len = arr.length, min = Infinity;
  while (len--) {
    if (Number(arr[len]) < min) {
      min = Number(arr[len]);
    }
  }
  return min;
};

function arrayMax(arr) {
  var len = arr.length, max = -Infinity;
  while (len--) {
    if (Number(arr[len]) > max) {
      max = Number(arr[len]);
    }
  }
  return max;
};

নির্ধারণ করুন minএবং maxশেষ উপাদানটিকে দিন এবং পুনরুক্তিগুলিকে 1 ( while(--len));) দ্বারা কমিয়ে দিন
ভেনুগোপাল

@ ভেনুগোপাল এরপরে আপনার অ্যারেটি খালি আছে কিনা তা দেখার জন্য আপনাকে একটি বিশেষ চেকের প্রয়োজন এবং +/- ইনফিনিটি
লিনাস আননেব্যাক

2
অদ্ভুত ... আমি লিঙ্কযুক্ত ওয়েবসাইটে গিয়েছিলাম ... এবং ফায়ারফক্স ৫১.০.০ / ম্যাক ওএস এক্স 10.12.0 এ পরীক্ষা করে দেখছি, হ্রাস-ভিত্তিক পদ্ধতির লুপ-ভিত্তিক চেয়ে 30% ধীর ... খুব আলাদা ফলাফল
পিয়ারপাওলো সিরা

2
very different results আপনি 5 বছর পরে এটা করেছে)
Алексей Лещук

1
2019 সালে reduceসমাধানটি সবচেয়ে ধীর। এমনকি যদি আপনি এমন একটি অ্যারের সাথে কাজ করেন যার লক্ষ লক্ষ উপাদান রয়েছে তবে লুপের জন্য মানটি ব্যবহার করা আরও ভালআরও উত্তর জন্য আমার উত্তর দেখুন।
টটিমেডলি

152

স্প্রেড অপারেটর (ES6) ব্যবহার করে

Math.max(...array);  // the same with "min" => Math.min(...array);


8
এই সমাধান ইতিমধ্যে দ্বারা সরবরাহ করা হয়েছিল একাধিক অন্যান্য উত্তর।
টোটেমেডলি

15
ম্যাথ.ম্যাক্স (... []) = -ইনফিনিটি। hahaha 😂😂😂
ডেভিড পোর্টাবেলা

@ ডেভিডপোর্টাবেলা নিশ্চিত হন না কেন এটি মজার। স্পেসিফিকেশন অনুযায়ী এটি কীভাবে কাজ করে :If no arguments are given, the result is -∞.
প্যাট্রিক রবার্টস

3
হ্যাঁ, জাভাস্ক্রিপ্টের স্পেসিফিকেশনটি ভয়াবহ rible এটি সুস্পষ্ট বলে মনে হচ্ছে কোনও সংখ্যার নূন্যতম গণনা করা যায় না। অন্যান্য আরও গুরুতর প্রোগ্রামিং ভাষায়, যেমন স্কালায়, খালি অ্যারের মিনিটের জন্য জিজ্ঞাসা করা ব্যতিক্রম ছুঁড়ে দেয়।
ডেভিড পোর্টাবেলা

3
স্কেলা এমন লোকদের জন্য যাদের একটি মেশিনের প্রয়োজন তাদের বলার জন্য তারা এটি ভুল করেছে
থানাডানটো

106

TL; ড

// For regular arrays:
var max = Math.max(...arrayOfNumbers);

// For arrays with tens of thousands of items:
let max = testArray[0];
for (let i = 1; i < testArrayLength; ++i) {
  if (testArray[i] > max) {
    max = testArray[i];
  }
}

MDN সমাধান

অফিসিয়াল MDN ডক্সMath.max() ইতিমধ্যে এই সমস্যা জুড়ে:

একটি সংখ্যার অ্যারেতে সর্বাধিক উপাদান সন্ধান করতে নিম্নলিখিত ফাংশনটি Function.prototype.apply () ব্যবহার করে । getMaxOfArray([1, 2, 3])এর সমতুল্য Math.max(1, 2, 3), তবে আপনি getMaxOfArray()কোনও আকারের প্রোগ্রাম্যাটিকভাবে নির্মিত অ্যারে ব্যবহার করতে পারেন ।

function getMaxOfArray(numArray) {
    return Math.max.apply(null, numArray);
}

বা নতুন স্প্রেড অপারেটরের সাথে , একটি অ্যারের সর্বাধিক পাওয়া খুব সহজ হয়ে যায়।

var arr = [1, 2, 3];
var max = Math.max(...arr);

একটি অ্যারের সর্বাধিক আকার

এমডিএন অনুসারেapply এবং বিস্তার সমাধান ছিল যে আর্গুমেন্ট সর্বোচ্চ সংখ্যক সীমা থেকে এসেছিলেন 65536 একটি সীমাবদ্ধতা:

তবে সাবধান থাকুন: এইভাবে প্রয়োগ করে আপনি জাভাস্ক্রিপ্ট ইঞ্জিনের যুক্তির দৈর্ঘ্য সীমা ছাড়িয়ে যাওয়ার ঝুঁকিটি চালান। অনেকগুলি আর্গুমেন্টের সাথে ফাংশন প্রয়োগের পরিণতিগুলি (কয়েক হাজার যুক্তির চেয়ে বেশি ভাবেন) ইঞ্জিনগুলিতে পৃথক হয়ে যায় ( জাভাস্ক্রিপ্টকোরের মধ্যে হার্ড-কোডেড যুক্তির সীমা 65536 রয়েছে ) কারণ সীমাটি (প্রকৃতপক্ষে কোনও অতিরিক্ত-বৃহত স্ট্যাকের প্রকৃতিও রয়েছে) আচরণ) অনির্দিষ্ট is কিছু ইঞ্জিন ব্যতিক্রম ছুঁড়ে ফেলবে। আরও ক্ষতিকারকভাবে, অন্যরা ইচ্ছাকৃতভাবে প্রয়োগিত ফাংশনে পাস হওয়া যুক্তির সংখ্যা সীমাবদ্ধ করবে। এই পরবর্তী ঘটনাটি উদাহরণস্বরূপ: যদি এইরকম ইঞ্জিনের চারটি আর্গুমেন্টের সীমা থাকে (প্রকৃত সীমা অবশ্যই উল্লেখযোগ্যভাবে উচ্চতর হয়) তবে এটি এমন হবে যেন উপরের উদাহরণগুলিতে প্রয়োগ করার জন্য 5, 6, 2, 3 টি আর্গুমেন্ট পাস হয়ে গেছে, বরং সম্পূর্ণ অ্যারের চেয়ে।

তারা এমনকি একটি সংকর সমাধান সরবরাহ করে যা অন্যান্য সমস্যার তুলনায় সত্যই ভাল পারফরম্যান্স দেয় না। আরও জন্য নীচে কর্মক্ষমতা পরীক্ষা দেখুন।

2019 সালে আসল সীমা কল স্ট্যাকের সর্বোচ্চ আকার । আধুনিক ক্রোমিয়াম ভিত্তিক ডেস্কটপ ব্রাউজারগুলির জন্য এর অর্থ হ'ল যখন এটি সর্বনিম্ন / সর্বাধিক applyবা সর্বাধিক সন্ধানের ক্ষেত্রে আসে তখন ব্যবহারিকভাবে কেবলমাত্র অ্যারেগুলির সর্বাধিক আকার হয় 120000 ডলার is । এর উপরে, একটি স্ট্যাক ওভারফ্লো হবে এবং নিম্নলিখিত ত্রুটি নিক্ষেপ করা হবে:

রেঞ্জেরর: সর্বোচ্চ কল স্ট্যাকের আকার অতিক্রম করেছে

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

সতর্কবাণী! এই স্ক্রিপ্টটি চালাতে সময় লাগে এবং আপনার সিস্টেমের কার্যকারিতার উপর নির্ভর করে এটি আপনার ব্রাউজার / সিস্টেমকে ধীর করে দিতে পারে বা ক্রাশ হতে পারে!

let testArray = Array.from({length: 10000}, () => Math.floor(Math.random() * 2000000));
for (i = 10000; i < 1000000; ++i) {
  testArray.push(Math.floor(Math.random() * 2000000));
  try {
    Math.max.apply(null, testArray);
  } catch (e) {
    console.log(i);
    break;
  }
}

বড় অ্যারেতে পারফরম্যান্স

এস্কেপনেটস্কেপের মন্তব্যে পরীক্ষার ভিত্তিতে আমি কয়েকটি মানদণ্ড তৈরি করেছি যা কেবলমাত্র 100000 আইটেমের সাথে একটি এলোমেলো সংখ্যায় 5 টি ভিন্ন পদ্ধতি পরীক্ষা করে ।

2019 সালে, ফলাফলগুলি দেখায় যে স্ট্যান্ডার্ড লুপ (যা বিটিডাব্লু এর আকার সীমাবদ্ধতা নেই) সর্বত্র দ্রুত। applyএবং স্প্রেডটি এর কাছাকাছি সময়ে আসে, তারপরে MDD এর হাইব্রিড দ্রবণটি তারপরে reduceসবচেয়ে ধীর হিসাবে হয়।

প্রায় সমস্ত পরীক্ষাগুলি একই ফলাফল দিয়েছে, যেখানে ছড়িয়ে পড়ে এমন কিছু বাদে যেখানে ধীরে ধীরে ধীরে ধীরে শেষ হয়েছিল।

যদি আপনি 1 মিলিয়ন আইটেম রাখার জন্য আপনার অ্যারে বাড়িয়ে তোলেন তবে জিনিসগুলি বিরতি পেতে শুরু করে এবং আপনি দ্রুত দ্রবণ reduceহিসাবে এবং ধীর হিসাবে মানক লুপটি রেখে যান ।

জেএসপিফার মানদণ্ড

অ্যারের ন্যূনতম / সর্বাধিক আইটেমটি সন্ধান করতে jsperf.com বেঞ্চমার্কের বিভিন্ন সমাধানের ফলাফল

জেএসবেন বেঞ্চমার্ক

একটি অ্যারের ন্যূনতম / সর্বাধিক আইটেমটি খুঁজতে jsben.com বেঞ্চমার্ক বিভিন্ন সমাধানের ফলাফল করে results

JSBench.me বেঞ্চমার্ক

একটি অ্যারের ন্যূনতম / সর্বাধিক আইটেমটি খুঁজতে jsbench.me বেঞ্চমার্ক বিভিন্ন সমাধানের ফলাফল

বেঞ্চমার্ক উত্স কোড


যদি আপনি টাইপ স্ক্রিপ্টটি স্প্রেড অপারেটর হিসাবে দেখানো হয় তবে Math.max.apply(Math, arr)'সর্বোচ্চ' সামঞ্জস্যের জন্য সংকলিত হয় ।
সাইমন_উইভার

1
এমডিএন থেকেও: "উভয়ই ছড়িয়ে পড়ে (...)এবং applyহয় ব্যর্থ হয় বা ভুল ফলাফলটি ফিরে আসে যদি অ্যারেতে অনেক উপাদান থাকে [...] হ্রাস সমাধানে এই সমস্যা নেই" ক্রোম, এফএফ, এজ এবং আইআই 11 পরীক্ষা করে মনে হচ্ছে এটি এটি 100k মান পর্যন্ত অ্যারে জন্য ঠিক আছে। (উইন 10 এবং সর্বশেষ ব্রাউজারগুলিতে পরীক্ষিত: ক্রোম 110 কে, ফায়ারফক্স 300 ক, এজ 400 ক, আই 1111 ক)।
অরিয়াদাম

এটি একটি খুব ধীর পদ্ধতি, অ্যারেতে যদি কয়েক হাজার উপাদান থাকে?
স্লাভা ফমিন দ্বিতীয়

@ স্লাভাফমিনআই আমি উত্তরটি প্রসারিত করেছি যাতে এটি হাজার হাজার উপাদান সহ অ্যারেগুলিকে কভার করে।
টটিমেডলি

68

আপনি যদি আমার মতো অসম্পূর্ণ ব্যবহার Math.max.apply(যদি এমডিএন অনুসারে বড় অ্যারে দেওয়ার সময় ত্রুটির কারণ হতে পারে ) হয়ে থাকে তবে এটি ব্যবহার করে দেখুন:

function arrayMax(array) {
  return array.reduce(function(a, b) {
    return Math.max(a, b);
  });
}

function arrayMin(array) {
  return array.reduce(function(a, b) {
    return Math.min(a, b);
  });
}

অথবা, ES6 এ:

function arrayMax(array) {
  return array.reduce((a, b) => Math.max(a, b));
}

function arrayMin(array) {
  return array.reduce((a, b) => Math.min(a, b));
}

বেনামী ফাংশন দুর্ভাগ্যবশত প্রয়োজনীয় (পরিবর্তে ব্যবহার করছেন Math.max.bind(Math)কারণ reduceশুধু পাস না aএবং bতার ফাংশন, কিন্তু iএবং অ্যারে নিজেই একটি রেফারেন্স, তাই আমরা আমরা কল চেষ্টা করবেন না তা নিশ্চিত করার জন্য আছে maxভাল হিসাবে যারা করেন।


আপনার ES6 উদাহরণ, কেবল ফিরে আসার কোনও কারণ নেই Math.max(...array)?
ওয়াজেসিচ বেদনারস্কি

এই পৃষ্ঠাটি @WojciechBednarski থেকে মনে হচ্ছে যে স্প্রেড অপারেটরটি ব্যবহার করা একটি অ্যারে পাস করার সমান applyএবং তাই একই ডাউনসাইড রয়েছে (সর্বাধিক যুক্তির সীমা)।
ড্যানিয়েল বাকমাস্টার

এর জন্য ধন্যবাদ. হ্রাস করার পরে আপনি কেবল অনুপস্থিত বন্ধনীটি সংশোধন করতে পারেন:function arrayMax(array) { return array.reduce(function(a, b) { return Math.max(a, b); }); // <--------- missing ) }
আরকোভস্কি

1
@ ড্যানিয়েলডিয়েটরিচ আমি অনুমান করি যে সমতুল্যটি করা হচ্ছে, Math.min()কোনও মূল্যবোধ, রিটার্ন সহ কল করা নয় Infinity, যাতে এই ক্রিয়াকলাপগুলি reduce(..., Infinity)সেই আচরণের সাথে মেলে। যদিও আমি এটি ব্যতীত ছুঁড়ে ফেলা পছন্দ করি (যদিও এটি বর্তমানে রয়েছে) কারণ সর্বনিম্ন খালি অ্যারে নেওয়া ত্রুটি বলে মনে হচ্ছে।
ড্যানিয়েল বাকমাস্টার

1
এতদূর হ্রাস করা সবচেয়ে ধীর।
:24

40

.apply যখন অভিপ্রায়টি আর্গুমেন্ট মানগুলির তালিকা সহ একটি ভেরিয়াদিক ফাংশন চাওয়া হয় তখন প্রায়শই ব্যবহৃত হয়

Math.max([value1[,value2, ...]])ফাংশন শূন্য বা তার বেশি সংখ্যার বৃহত্তম ফেরৎ।

Math.max(10, 20); // 20
Math.max(-10, -20); // -10
Math.max(-10, 20); // 20

Math.max()পদ্ধতি একটি অ্যারের মধ্যে পাস করার অনুমতি দেয় না। আপনার যদি সবচেয়ে বড় হওয়া দরকার সেইগুলির একটি তালিকা আপনার কাছে থাকে তবে আপনি সাধারণত ফাংশন.প্রোটোটাইপ.অ্যাপ্লি () ব্যবহার করে এই ফাংশনটি কল করবেন eg

Math.max.apply(null, [10, 20]); // 20
Math.max.apply(null, [-10, -20]); // -10
Math.max.apply(null, [-10, 20]); // 20

তবে ECMAScript 6 হিসাবে আপনি স্প্রেড অপারেটরটি ব্যবহার করতে পারেন :

স্প্রেড অপারেটর এমন এক জায়গায় অভিব্যক্তি প্রসারিত করতে দেয় যেখানে একাধিক যুক্তি (ফাংশন কলগুলির জন্য) বা একাধিক উপাদান (অ্যারে আক্ষরিক জন্য) প্রত্যাশিত।

স্প্রেড অপারেটরটি ব্যবহার করে উপরেরগুলি আবার লিখতে পারেন:

Math.max(...[10, 20]); // 20
Math.max(...[-10, -20]); // -10
Math.max(...[-10, 20]); // 20

বৈকল্পিক অপারেটরটি ব্যবহার করে কোনও ফাংশন কল করার সময় আপনি অতিরিক্ত মানগুলিও যুক্ত করতে পারেন, যেমন eg

Math.max(...[10, 20], 50); // 50
Math.max(...[-10, -20], 50); // 50

বোনাস:

ছড়িয়ে অপারেটর একটি সমন্বয় ব্যবহার করে, আপনি অ্যারে আক্ষরিক সিনট্যাক্স ব্যবহার করতে পরিস্থিতিতে যেখানে ES5 আপনি অনুজ্ঞাসূচক কোড ফিরে আসবে করতে হবে নতুন অ্যারে তৈরি করতে সক্ষম push, spliceইত্যাদি

let foo = ['b', 'c'];
let bar = ['a', ...foo, 'd', 'e']; // ['a', 'b', 'c', 'd', 'e']

1
বোনাসে আপনার শেষ উদাহরণটি concatবেশিরভাগ প্রগ্রেমারদের দ্বারা ব্যবহার করে লেখা হবে কারণ এটি আপনাকে একটি একক লাইনের শৈলী বজায় রাখতে দেয়।
কোডি অ্যালান টেইলর

31

দুটি উপায় সংক্ষিপ্ত এবং সহজ:

let arr = [2, 6, 1, 0]

উপায় 1 :

let max = Math.max.apply(null, arr)

উপায় 2 :

let max = arr.reduce(function(a, b) {
    return Math.max(a, b);
});

অ্যারে খালি কিনা তা দেখুন - আপনি নেতিবাচক অনন্ত পাবেন যা আপনি চান তা নাও হতে পারে। আপনি যদি পছন্দ করতে চান তবে আপনি স্প্রেড সিনট্যাক্স 0ব্যবহার করতে পারেন (' [0].concat(arr)[0, ...arr]
আরআর'র

22

আপনি অ্যারের প্রকারটি প্রসারিত করে এটি করেন:

Array.max = function( array ){
    return Math.max.apply( Math, array );
};
Array.min = function( array ){
    return Math.min.apply( Math, array );
}; 

এখান থেকে বুস্ট করা (জন রেজিগ দ্বারা)


20

একটির সর্বনিম্ন মান খুঁজে পাওয়ার সহজ সমাধান Arrayউপাদানগুলির হ'ল Arrayপ্রোটোটাইপ ফাংশনটি ব্যবহার করা reduce:

A = [4,3,-9,-2,2,1];
A.reduce((min, val) => val < min ? val : min, A[0]); // returns -9

বা জাভাস্ক্রিপ্টের অন্তর্নির্মিত ম্যাথ.মিন () ফাংশন (ধন্যবাদ @ টেনফ্লেক্স) ব্যবহার করে:

A.reduce((min,val) => Math.min(min,val), A[0]);

এটি সেট minকরে A[0]এবং তারপরে A[1]...A[n]এটি বর্তমানের চেয়ে কঠোরভাবে কম কিনা তা পরীক্ষা করে min। যদিA[i] < min তারপর minআপডেট করা হয়েছে A[i]। সমস্ত অ্যারে উপাদানগুলি প্রক্রিয়া minকরা হয়ে গেলে ফলাফল হিসাবে ফিরে আসে।

সম্পাদনা : সর্বনিম্ন মানের অবস্থান অন্তর্ভুক্ত করুন:

A = [4,3,-9,-2,2,1];
A.reduce((min, val) => val < min._min ? {_min: val, _idx: min._curr, _curr: min._curr + 1} : {_min: min._min, _idx: min._idx, _curr: min._curr + 1}, {_min: A[0], _idx: 0, _curr: 0}); // returns { _min: -9, _idx: 2, _curr: 6 }

3
এড্রেস ((মিনিট, ভাল) => ম্যাথ.মিনি (মিনিট, ভাল), এ [0]); এমনকি আরও ছোট
টেনফ্লেক্স

বোনাস প্রশ্ন হিসাবে, কীভাবে কেবল minমূল্যটিই নয় তবে অ্যারেতে তার অবস্থান কীভাবে পাওয়া যায়?
স্টিভেক

@ মেশফিল্ডস - আমি উত্তর আপডেট করেছি।
নিকোলাস Lykke Iversen

15

অন্যরা ইতিমধ্যে কিছু সমাধান দিয়েছেন যাতে তারা বৃদ্ধি করে Array.prototype। এই উত্তরটি সকল আমি চাই নির্মল তা হওয়া উচিত Math.min.apply( Math, array )বা Math.min.apply( null, array )সুতরাং কোন প্রসঙ্গে ব্যবহার করা উচিত, Mathবা null?

nullপ্রসঙ্গ হিসাবে পাস করার সময় apply, তারপরে প্রসঙ্গটি বিশ্বব্যাপী অবজেক্টে ( windowব্রাউজারের ক্ষেত্রে বস্তু) ডিফল্ট হয়ে যায় default Mathপ্রসঙ্গ হিসাবে বস্তুটি পাস করা সঠিক সমাধান হবে তবে এটি কোনওভাবেই পাস করতে ক্ষতি করবে না null। ফাংশনটি nullসজ্জিত করার সময় সমস্যা তৈরি হতে পারে এমন উদাহরণ এখানে রয়েছে Math.max:

// decorate Math.max
(function (oldMax) {
    Math.max = function () {
        this.foo(); // call Math.foo, or at least that's what we want

        return oldMax.apply(this, arguments);
    };
})(Math.max);

Math.foo = function () {
    print("foo");
};

Array.prototype.max = function() {
  return Math.max.apply(null, this); // <-- passing null as the context
};

var max = [1, 2, 3].max();

print(max);

কারণ উপরে একটি ব্যতিক্রম নিক্ষেপ করা হবে this.fooহিসাবে মূল্যায়ন করা হবে window.foo, যা, undefined। আমরা যদি প্রতিস্থাপন nullসঙ্গে Math, জিনিষ প্রত্যাশিত ও সুতো "foo বিন্যাস" পর্দায় প্রিন্ট করা হবে হিসেবে কাজ করবে (আমি এই ব্যবহার পরীক্ষিত মোজিলা গণ্ডার )।

আপনি অনুমান করতে পারেন যে কেউ এটি সজ্জিত করেনি Math.max, পাসিং nullসমস্যা ছাড়াই কাজ করবে।


2
পয়েন্ট নেওয়া হয়েছে। তবে কেন কেউ সাজাতে হবে Foo.staticMethodএবং রেফারেন্স করবে this? সজ্জাকারীর নকশায় সেটি কী ভুল হবে না? (অবশ্যই যদি না তারা বিশ্বব্যাপী ক্ষেত্রের রেফারেন্স দিতে চেয়েছিল , এবং জাভাস্ক্রিপ্ট ইঞ্জিনটি যেমন রাইনো ব্যবহৃত হচ্ছে তার থেকে আলাদা থাকতে চাই )।
রোয়াতিন মার্থ

1
বৈশিষ্ট সম্পর্কে যা specced ফাংশন "পড়ুন উচিত স্পষ্ট হয় এই মান" (প্রকৃতপক্ষে, যে ফ্রেজ নির্দেশের মধ্যে 125 বার প্রদর্শিত)। Math.max, অনুমান অনুযায়ী প্রয়োগ, ব্যবহার করে না this। যদি কেউ Math.maxএটিকে ওভাররাইড করে যে এটি ব্যবহার করে this, তবে তারা তার আচরণটি অনুমানের লঙ্ঘন করেছে এবং আপনার উচিত তাদের তীক্ষ্ণ বস্তু নিক্ষেপ করা। আপনার সম্ভাব্যতার চেয়ে আপনার কোডিং করা উচিত নয় যে আপনি যে কেউ পরিবর্তিত হয়েছেন Math.maxএবং Math.minলুলদের পক্ষে সম্ভাবনা রয়েছে তার চারপাশে কোড করা উচিত ।
মার্ক আমেরিকা 14'15

15

এটি করার আরও একটি উপায়:

var arrayMax = Function.prototype.apply.bind(Math.max, null);

ব্যবহার:

var max = arrayMax([2, 5, 1]);

কেউ কীভাবে এটি কাজ করে তা ব্যাখ্যা করতে পারেন? এটি বেশ ডোপ। আমার বোঝাটি কি সঠিক: অ্যারেআম্যাক্স একটি ফাংশন এবং আমরা এর প্রোটোটাইপের কোনও সংস্থার সাথে কিছু বেঁধে রাখি? এটি প্রয়োগ.বাইন্ড কী এবং প্রতিটি প্রোটোটাইপ এটি রয়েছে?
স্যাম

আপনি যাচাই করতে পারেন: benalman.com/news/2012/09/partial-application-in-javascript
sbr

13

এটি আপনার উদ্দেশ্য অনুসারে হতে পারে।

Array.prototype.min = function(comparer) {

    if (this.length === 0) return null;
    if (this.length === 1) return this[0];

    comparer = (comparer || Math.min);

    var v = this[0];
    for (var i = 1; i < this.length; i++) {
        v = comparer(this[i], v);    
    }

    return v;
}

Array.prototype.max = function(comparer) {

    if (this.length === 0) return null;
    if (this.length === 1) return this[0];

    comparer = (comparer || Math.max);

    var v = this[0];
    for (var i = 1; i < this.length; i++) {
        v = comparer(this[i], v);    
    }

    return v;
}

আপনার
ভিটি

হয় comparerকিছু নির্দিষ্ট সুযোগ চালানোর কথা? কারণ এটি প্রতিটি সময়ে this[index]যা উল্লেখ রয়েছে undefinedtime
রোয়াতিন মার্থ

স্থির, আমি সবসময় ফাংশন স্তরের স্কোপিং সম্পর্কে ভুলে যাই।
কেওসপ্যান্ডিয়ন

ওহ এখন, এখন @ আইনূট জি স্টান আমার মত একই "ভুল প্রসঙ্গ" যুক্তির জন্য আপনাকে সমালোচনা করবেন, যেহেতু আপনার ডিফল্ট তুলনাকারী ( Math.xxx) বিশ্বব্যাপী সুযোগে
চলবে

এটি সত্য হতে পারে, তবে নতুন ফাংশন স্বাক্ষরটির কোনও সুযোগ নেই কারণ এটি তুলনা করা দরকার এমন দুটি বস্তু লাগে।
কেওসপ্যান্ডিয়ন


13

বিকল্প পদ্ধতি


Math.minএবং Math.maxপদ্ধতি উভয় রিকার্সিভ অপারেশন জাতীয় ইঞ্জিন কল স্ট্যাক যোগ করা হচ্ছে যে, এবং সম্ভবত হয় ক্র্যাশ একটি অ্যারের যে আইটেমের বৃহৎ সংখ্যা উপস্থিত রয়েছে জন্য
(আরও ~ 10⁷ আইটেম চেয়ে, ব্যবহারকারীর ব্রাউজার উপর নির্ভর করে)।

Math.max (... এরে (1000000) .keys ());

আনকচড রেঞ্জেরর: সর্বোচ্চ কল স্ট্যাকের আকার ছাড়িয়ে গেছে

পরিবর্তে, এর মতো কিছু ব্যবহার করুন:

arr.reduce((max, val) => max > val ? max : val, arr[0])

বা আরও ভাল রান-টাইম সহ:

function maxValue(arr) {
  let max = arr[0];

  for (let val of arr) {
    if (val > max) {
      max = val;
    }
  }
  return max;
}

বা ন্যূনতম এবং সর্বোচ্চ উভয়ই পেতে:

function getMinMax(arr) {
    return arr.reduce(({min, max}, v) => ({
        min: min < v ? min : v,
        max: max > v ? max : v,
    }), { min: arr[0], max: arr[0] });
}

বা আরও ভাল রান-টাইম * সহ:

function getMinMax(arr) {
    let min = arr[0];
    let max = arr[0];
    let i = arr.length;

    while (i--) {
        min = arr[i] < min ? arr[i] : min;
        max = arr[i] > max ? arr[i] : max;
    }
    return { min, max };
}

* ১,০০,০০০ আইটেমের সাথে পরীক্ষিত:
কেবলমাত্র একটি রেফারেন্সের জন্য, প্রথম ফাংশন রান-টাইম (আমার মেশিনে) ছিল 15.84ms বনাম 2 য় ফাংশন মাত্র 4.32 মিমি সহ।


12

আমি হ্রাস ফাংশন উল্লেখ না করে অবাক।

var arr = [1, 10, 5, 11, 2]

var b = arr.reduce(function(previous,current){ 
                      return previous > current ? previous:current
                   });

b => 11
arr => [1, 10, 5, 11, 2]

সচেতন থাকুন: হ্রাস ()
আইই

1
আমি ক্রোমিয়ামের বর্তমান সংস্করণে এটি ব্যবহার করতে পারে বলে মনে হচ্ছে না।
পিজেএসকোপল্যান্ড

9

বড় অ্যারেগুলির জন্য (~ 10⁷ উপাদান), Math.minএবংMath.max নোড.জেজে একটি রেঞ্জেরিয়ার (সর্বাধিক কল স্ট্যাকের আকার ছাড়িয়েছে) সংগ্রহ করে।

বড় অ্যারেগুলির জন্য, একটি দ্রুত এবং মলিন সমাধানটি হ'ল:

Array.prototype.min = function() {
    var r = this[0];
    this.forEach(function(v,i,a){if (v<r) r=v;});
    return r;
};

8

আমার একই সমস্যা ছিল, আমার একটি অ্যারের ন্যূনতম এবং সর্বাধিক মান অর্জন করা দরকার ছিল এবং আমার অবাক করে দিয়েছিল যে অ্যারেগুলির জন্য কোনও বিল্ট-ইন ফাংশন ছিল না। অনেকগুলি পড়ার পরে, আমি নিজেই "শীর্ষ 3" সমাধানগুলি পরীক্ষা করার সিদ্ধান্ত নিয়েছি:

  1. পৃথক সমাধান: বর্তমান সর্বাধিক এবং / বা ন্যূনতম মানের সাথে অ্যারের প্রতিটি উপাদান পরীক্ষা করার জন্য একটি লুপ;
  2. অ্যাপ্লাইএই সমাধান: ম্যাথ.ম্যাক্স এবং / অথবা ম্যাথ.মিন অভ্যন্তরীণ ফাংশনগুলিতে প্রয়োগ করুন (নাল, অ্যারে) ব্যবহার করে অ্যারে পাঠানো;
  3. হ্রাস সমাধান: হ্রাস (ফাংশন) ব্যবহার করে অ্যারের প্রতিটি উপাদান বিরুদ্ধে একটি চেক পুনরাবৃত্তি।

পরীক্ষার কোডটি ছিল:

function GetMaxDISCRETE(A)
{   var MaxX=A[0];

    for (var X=0;X<A.length;X++)
        if (MaxX<A[X])
            MaxX=A[X];

    return MaxX;
}

function GetMaxAPPLY(A)
{   return Math.max.apply(null,A);
}

function GetMaxREDUCE(A)
{   return A.reduce(function(p,c)
    {   return p>c?p:c;
    });
}

অ্যারেটি 100,000 এলোমেলো পূর্ণসংখ্যার সংখ্যায় ভরা ছিল, প্রতিটি ফাংশন উইন্ডোজ ভিস্তার সাথে একটি ইন্টেল পেন্টিয়াম 4 2.99GHz ডেস্কটপে মোজিলা ফায়ারফক্স 28.0 এ 10,000 বার কার্যকর করা হয়েছিল। সময়গুলি সেকেন্ডে হয়, পারফরম্যান্স.নু () ফাংশন দ্বারা পুনরুদ্ধার করা হয়। 3 টি ভগ্নাংশ এবং মানক বিচ্যুতি সহ ফলাফলগুলি ছিল:

  1. পৃথক সমাধান: গড় = 0.161, এসডি = 0.078
  2. অ্যাপ্লিকেশন সমাধান: গড় = 3.571 এসডি, এসডি = 0.487
  3. REDUCE সমাধান: গড় = 0.350, এসডি = 0.044

REDUCE দ্রবণটি পৃথক দ্রবণের চেয়ে 117% ধীর ছিল। অ্যাপ্লিকেশন সলিউশনটি পৃথক দ্রবণের চেয়ে 2,118% ধীরে ধীরে খারাপ ছিল। এছাড়াও, পিটার যেমন পর্যবেক্ষণ করেছেন, এটি বড় অ্যারে (প্রায় এক হাজারেরও বেশি উপাদান) এর জন্য কাজ করে না।

এছাড়াও, পরীক্ষাগুলি শেষ করতে, আমি এই বর্ধিত বিযুক্ত কোডটি পরীক্ষা করেছি:

var MaxX=A[0],MinX=A[0];

for (var X=0;X<A.length;X++)
{   if (MaxX<A[X])
        MaxX=A[X];
    if (MinX>A[X])
        MinX=A[X];
}

সময়সীমা: গড় = 0.218, এসডি = 0.094

সুতরাং, এটি সহজ বিচ্ছিন্ন সমাধানের তুলনায় 35% ধীর, তবে এটি একবারে সর্বাধিক এবং সর্বনিম্ন উভয় মান পুনরুদ্ধার করে (অন্য কোনও সমাধান এগুলি পুনরুদ্ধার করতে কমপক্ষে দ্বিগুণ সময় নেয়)। ও.পি. উভয় মান প্রয়োজন হলে, পৃথক সমাধান সেরা পছন্দ (এমনকি দুটি পৃথক ফাংশন হিসাবে, একটি সর্বাধিক গণনা করার জন্য এবং অন্যটি ন্যূনতম গণনা করার জন্য, তারা দ্বিতীয় সেরা, রেডইউসিইউ সমাধানকে ছাড়িয়ে যাবে)।


8

আপনি আপনার প্রকল্পের যে কোনও জায়গায় নিম্নলিখিত ফাংশনটি ব্যবহার করতে পারেন:

function getMin(array){
    return Math.min.apply(Math,array);
}

function getMax(array){
    return Math.max.apply(Math,array);
}

এবং তারপরে আপনি অ্যারে পাস করে ফাংশনগুলি কল করতে পারেন:

var myArray = [1,2,3,4,5,6,7];
var maximo = getMax(myArray); //return the highest number

8

নিম্নলিখিত কোডটি আমার পক্ষে কাজ করে:

var valueList = [10,4,17,9,3];
var maxValue = valueList.reduce(function(a, b) { return Math.max(a, b); });
var minValue = valueList.reduce(function(a, b) { return Math.min(a, b); });

7

আপনি যেতে হিসাবে ট্র্যাক রাখা, মাধ্যমে ইট্রেটেট।

var min = null;
var max = null;
for (var i = 0, len = arr.length; i < len; ++i)
{
    var elem = arr[i];
    if (min === null || min > elem) min = elem;
    if (max === null || max < elem) max = elem;
}
alert( "min = " + min + ", max = " + max );

অ্যারেতে কোনও উপাদান না থাকলে এটি সর্বনিম্ন / সর্বোচ্চ নাল ছাড়বে। অ্যারেতে কোনও উপাদান থাকলে একটি পাসে ন্যূনতম এবং সর্বাধিক সেট করবে।

আপনি rangeপুনরায় ব্যবহারের সুযোগ এবং পড়ার যোগ্যতার উন্নতি করতে উপরেরটি ব্যবহার করে অ্যারে বাড়িয়ে দিতে পারেন । Http://jsfiddle.net/9C9fU/ এ একটি কার্যকারী ফিডল দেখুন

Array.prototype.range = function() {

    var min = null,
        max = null,
        i, len;

    for (i = 0, len = this.length; i < len; ++i)
    {
        var elem = this[i];
        if (min === null || min > elem) min = elem;
        if (max === null || max < elem) max = elem;
    }

    return { min: min, max: max }
};

হিসাবে ব্যবহার

var arr = [3, 9, 22, -7, 44, 18, 7, 9, 15];

var range = arr.range();

console.log(range.min);
console.log(range.max);

@ জর্ডানডিলন চ্যাপিয়ান আমি সম্মত হয়েছি, তবে এটি কোনও rangeফাংশনে প্রসারিত করা তুচ্ছ হবে যা একই সাথে আইএমও-তে সর্বনিম্ন এবং সর্বোচ্চ উভয়ই পেতে পারে - যেহেতু আমি আমার উত্তরের আপডেট দিয়েছি।
tvanfosson

6

আমি ভেবেছিলাম আমি আমার সহজ এবং সহজ বোঝার সমাধানটি ভাগ করব।

মিনিটের জন্য:

var arr = [3, 4, 12, 1, 0, 5];
var min = arr[0];
for (var k = 1; k < arr.length; k++) {
  if (arr[k] < min) {
    min = arr[k];
  }
}
console.log("Min is: " + min);

এবং সর্বোচ্চ জন্য:

var arr = [3, 4, 12, 1, 0, 5];
var max = arr[0];
for (var k = 1; k < arr.length; k++) {
  if (arr[k] > max) {
    max = arr[k];
  }
}
console.log("Max is: " + max);



ধন্যবাদ। আমি আমার উত্তর পরিবর্তন করেছি।
আয়নুত নেখুলা

পুনরাবৃত্তিটি এখনও ভুল (অস্তিত্বের বৈশিষ্ট্য অ্যাক্সেস করা)।
বার্গি

কি ভুল, আমি কিছুই ভুল দেখছি না। আপনি একটি উদাহরণ দিতে পারেন দয়া করে?
আয়নুত নেখুলা

1
এখন সে অনুযায়ী সংশোধন করা হয়েছে। আশা করি আমি আপনাকে সঠিকভাবে বুঝতে পেরেছি।
আয়নুত নেখুলা

6

গণিত ফাংশন সর্বাধিক এবং মিনিট ব্যবহারের পাশাপাশি, অন্য একটি ফাংশনটি হ'ল সাজানো () এর বিল্ট ইন ফাংশন: আমরা এখানে যাই go

const nums = [12, 67, 58, 30].sort((x, y) => 
x -  y)
let max = nums[0]
let min = nums[nums.length -1]

5

সাধারণ জিনিস, সত্যিই।

var arr = [10,20,30,40];
arr.max = function() { return  Math.max.apply(Math, this); }; //attach max funct
arr.min = function() { return  Math.min.apply(Math, this); }; //attach min funct

alert("min: " + arr.min() + " max: " + arr.max());

5

অবজেক্টের অ্যারে থেকে সর্বাধিক মান পাওয়ার একটি উপায় এখানে। একটি অনুলিপি তৈরি করুন (স্লাইস সহ), তারপরে অনুলিপি ক্রমে সাজানো এবং প্রথম আইটেমটি ধরুন।

var myArray = [
    {"ID": 1, "Cost": 200},
    {"ID": 2, "Cost": 1000},
    {"ID": 3, "Cost": 50},
    {"ID": 4, "Cost": 500}
]

maxsort = myArray.slice(0).sort(function(a, b) { return b.ID - a.ID })[0].ID; 

5

ব্যবহার Math.max()বাMath.min()

Math.max(10, 20);   //  20
Math.min(-10, -20); // -20

নিম্নলিখিত ফাংশনটি Function.prototype.apply()একটি সংখ্যাসূচক অ্যারে সর্বাধিক উপাদান সন্ধান করতে ব্যবহার করে। getMaxOfArray([1, 2, 3])এর সমতুল্য Math.max(1, 2, 3), তবে আপনি getMaxOfArray()কোনও আকারের প্রোগ্রাম্যাটিকভাবে নির্মিত অ্যারে ব্যবহার করতে পারেন ।

function getMaxOfArray(numArray) {
  return Math.max.apply(null, numArray);
}

বা নতুন স্প্রেড অপারেটরের সাথে, একটি অ্যারের সর্বাধিক পাওয়া খুব সহজ হয়ে যায়।

var arr = [1, 2, 3];
var max = Math.max(...arr); // 3
var min = Math.min(...arr); // 1

4

যদি আপনি প্রোটোপ ব্যবহার করেন তবে কেওসপ্যান্ডিয়নের সমাধান কাজ করে। যদি তা না হয় তবে এটি বিবেচনা করুন:

Array.max = function( array ){
    return Math.max.apply( Math, array );
};

Array.min = function( array ){
    return Math.min.apply( Math, array );
};

উপরে অ্যারে মানটি পূর্ণসংখ্যা হিসাবে না এনএন প্রদান করবে সুতরাং এটি এড়াতে আপনার কিছু কার্যকারিতা তৈরি করা উচিত। অন্যথায় এটি কাজ করবে।


জিরোজ, রোটিন মার্থের কেবল যখন (নাল, এটি) আছে তখন কেন আপনার (ম্যাথ, এটি) সংঘাত হিসাবে রয়েছে?
হ্যাঙ্কএইচ

@ হ্যাঙ্কএইচ: আমার নিজের উত্তরের মন্তব্যে আপনার মন্তব্যে আমার প্রতিক্রিয়া দেখুন।
রোয়াতিন মার্থ

1
"প্রোটাইপ ব্যবহার করা হলে কেওসপ্যান্ডিয়নের সমাধান কাজ করে" বলতে আপনি কী বুঝছেন তা আমি বুঝতে পারি না। আপনি Mathবিষয়টিকে প্রসঙ্গ হিসাবে ব্যবহার না করে আপনার সমাধানটি কীভাবে আলাদা ?
আয়নু জি স্টান 18

দুঃখিত, আমি বোঝাতে চাইছি আপনি প্রোটোটাইপটি বাড়িয়ে দিলে আপনার কাজ হবে will দুঃক্ষিত।
জয়

তাহলে কোনটি ভাল, জিরোস না কওসপ্যান্ডিয়নের?
হ্যাঙ্কএইচ

3

আপনি লাইব্রেরি সুগার.জেএস ব্যবহার করলে , আপনি যেমন পরামর্শ দিচ্ছেন তেমনভাবে arr.min () এবং arr.max () লিখতে পারেন । আপনি অ-সংখ্যাযুক্ত অ্যারে থেকেও সর্বনিম্ন এবং সর্বাধিক মান পেতে পারেন।

মিনিট (মানচিত্র, সমস্ত = মিথ্যা) সর্বনিম্ন মান সহ অ্যারেতে উপাদান ফেরত দেয়। মানচিত্রটি চেক করার জন্য মানটি ম্যাপিং বা শর্টকাট হিসাবে অভিনয় করা একটি স্ট্রিং হতে পারে। যদি সমস্ত সত্য হয় তবে একটি অ্যারেতে সমস্ত ন্যূনতম মানগুলি ফিরিয়ে দেবে।

সর্বাধিক মান (মানচিত্র, সমস্ত = মিথ্যা) অ্যারের মধ্যে উপাদানটি সর্বাধিক মান দিয়ে দেয়। মানচিত্রটি চেক করার জন্য মানটি ম্যাপিং বা শর্টকাট হিসাবে অভিনয় করা একটি স্ট্রিং হতে পারে। যদি সমস্ত সত্য হয় তবে অ্যারেতে সমস্ত সর্বাধিক মান ফিরে আসবে।

উদাহরণ:

[1,2,3].min() == 1
['fee','fo','fum'].min('length') == "fo"
['fee','fo','fum'].min('length', true) == ["fo"]
['fee','fo','fum'].min(function(n) { return n.length; }); == "fo"
[{a:3,a:2}].min(function(n) { return n['a']; }) == {"a":2}
['fee','fo','fum'].max('length', true) == ["fee","fum"]

লো-ড্যাশ এবং আন্ডারস্কোর.জে এর মতো গ্রন্থাগারগুলিও অনুরূপ শক্তিশালী মিনি এবং সর্বাধিক ক্রিয়াকলাপ সরবরাহ করে:

লো-ড্যাশ থেকে উদাহরণ:

_.max([4, 2, 8, 6]) == 8
var characters = [
  { 'name': 'barney', 'age': 36 },
  { 'name': 'fred',   'age': 40 }
];
_.max(characters, function(chr) { return chr.age; }) == { 'name': 'fred', 'age': 40 }

3
let arr = [2,5,3,5,6,7,1];

let max = Math.max(...arr); // 7
let min = Math.min(...arr); // 1

2
এই সমাধানটি ইতিমধ্যে এই প্রশ্নের একাধিক অন্যান্য উত্তরদাতারা সরবরাহ করেছেন। আপনার উত্তর কি যুক্ত করে?
নিক

3

চেষ্টা

let max= a=> a.reduce((m,x)=> m>x ? m:x);
let min= a=> a.reduce((m,x)=> m<x ? m:x);

ম্যাথ.মিনি / সর্বোচ্চ (+ প্রয়োগ) এর জন্য আমরা ত্রুটি পাই:

সর্বাধিক কল স্ট্যাকের আকার ছাড়িয়ে গেছে (Chrome 74.0.3729.131)

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