আমার আছে এটা:
var arr = [0, 21, 22, 7];
সর্বাধিক মানের সূচকটিকে অন্য ভেরিয়েবলে ফেরানোর সর্বোত্তম উপায় কী?
আমার আছে এটা:
var arr = [0, 21, 22, 7];
সর্বাধিক মানের সূচকটিকে অন্য ভেরিয়েবলে ফেরানোর সর্বোত্তম উপায় কী?
উত্তর:
এটি সম্ভবত সবচেয়ে ভাল উপায়, যেহেতু এটি নির্ভরযোগ্য এবং পুরানো ব্রাউজারগুলিতে কাজ করে:
function indexOfMax(arr) {
if (arr.length === 0) {
return -1;
}
var max = arr[0];
var maxIndex = 0;
for (var i = 1; i < arr.length; i++) {
if (arr[i] > max) {
maxIndex = i;
max = arr[i];
}
}
return maxIndex;
}
এই ওয়ান-লাইনারটিও রয়েছে:
let i = arr.indexOf(Math.max(...arr));
এটি প্রয়োজনীয় হিসাবে দ্বিগুণ তুলনা সম্পাদন করে এবং RangeError
বড় অ্যারেগুলিতে একটি নিক্ষেপ করবে । আমি ফাংশন আটকে থাকব।
const max = arr.reduce((m, n) => Math.max(m, n))
, তারপরে সর্বাধিকের সূচকগুলি [...arr.keys()].filter(i => arr[i] === max)
।
[...arr.keys()]
একটি ত্রুটি আউটপুট দেয়:unexpected token
এক লাইনে এবং সম্ভবত দ্রুত arr.indexOf(Math.max.apply(Math, arr))
:
var a = [0, 21, 22, 7];
var indexOfMaxValue = a.reduce((iMax, x, i, arr) => x > arr[iMax] ? i : iMax, 0);
document.write("indexOfMaxValue = " + indexOfMaxValue); // prints "indexOfMaxValue = 2"
কোথায়:
iMax
- শ্রেষ্ঠ সূচক এতদূর (সর্বোচ্চ উপাদান সূচক এতদূর, প্রথম পুনরাবৃত্তির উপর iMax = 0
কারণ দ্বিতীয় যুক্তি থেকে reduce()
হয় 0
, আমরা দ্বিতীয় যুক্তি থেকে বাদ না পারেন, reduce()
আমাদের ক্ষেত্রে)x
- অ্যারে থেকে বর্তমানে পরীক্ষিত উপাদানi
- বর্তমানে পরীক্ষিত সূচকarr
- আমাদের অ্যারে ( [0, 21, 22, 7]
)reduce()
পদ্ধতি সম্পর্কে (ডেভিড ফ্লানাগানের "জাভাস্ক্রিপ্ট: দ্য সংজ্ঞা নির্দেশিকা" থেকে):
হ্রাস () দুটি যুক্তি লাগে takes প্রথমটি হ'ল ফাংশন যা হ্রাস অপারেশন সম্পাদন করে। এই হ্রাস ফাংশনের কাজটি হ'ল এককভাবে দুটি মানকে একক মানতে একত্রিত করা বা হ্রাস করা এবং সেই হ্রাসকৃত মানটি ফিরিয়ে দেওয়া।
হ্রাস () এর সাথে ব্যবহৃত ফাংশনগুলি ফর ইচ () এবং মানচিত্র () এর সাথে ব্যবহৃত ফাংশনের চেয়ে আলাদা। পরিচিত মান, সূচক এবং অ্যারের মানগুলি দ্বিতীয়, তৃতীয় এবং চতুর্থ আর্গুমেন্ট হিসাবে পাস করা হয়। প্রথম যুক্তি হ'ল এখন পর্যন্ত হ্রাসের জমে থাকা ফলাফল। ফাংশনটির প্রথম কলটিতে, এই প্রথম যুক্তি হ'ল প্রাথমিক মান যা আপনি দ্বিতীয় আর্গুমেন্ট হিসাবে () হ্রাস করার জন্য পাস করেছেন। পরবর্তী কলগুলিতে এটি ফাংশনের পূর্ববর্তী অনুরোধের মাধ্যমে ফিরে আসা মান।
আপনি যখন কোনও প্রাথমিক মান ছাড়াই () হ্রাস করার অনুরোধ করবেন তখন এটি অ্যারের প্রথম উপাদানটিকে প্রাথমিক মান হিসাবে ব্যবহার করে। এর অর্থ হ্রাস হ্রাস ফাংশনের প্রথম কলটিতে তার প্রথম এবং দ্বিতীয় আর্গুমেন্ট হিসাবে প্রথম এবং দ্বিতীয় অ্যারের উপাদান থাকবে।
arr.reduce((bestIndexSoFar, currentlyTestedValue, currentlyTestedIndex, array) => currentlyTestedValue > array[bestIndexSoFar] ? currentlyTestedIndex : bestIndexSoFar, 0);
, যেমন বর্ণনা করা যায় যা: বারবার অ্যারের সূচক 0 (2nd প্যারামিটার) থেকে শুরু, যদি currentlyTestedValue এ উপাদান এর মান বেশী bestIndexSoFar , তারপর ফিরে currentlyTestedIndex যেমন পরবর্তী পুনরাবৃত্তিতে করতে bestIndexSoFar ।
this.methods.reduce((methodIndex, currentMethod, currentMethodIndex, methods) => currentMethod.price <= methods[methodIndex].price ? currentMethodIndex : methodIndex, 0)
।
এখানে আরও একটি সমাধান রয়েছে, আপনি যদি স্প্রেড অপারেটর ব্যবহার করে ES6 ব্যবহার করছেন:
var arr = [0, 21, 22, 7];
const indexOfMaxValue = arr.indexOf(Math.max(...arr));
reduce
:[1,2,5,0,4].reduce((a,b,i) => a[0] < b ? [b,i] : a, [Number.MIN_VALUE,-1])
//[5,2]
[5e-324, -1]
অ্যারে খালি থাকলে এটি ফিরে আসে । আপনি যদি কেবল সূচক চান তবে [1]
পরে দিন।
>
এবং MAX_VALUE
):[1,2,5,0,4].reduce((a,b,i) => a[0] > b ? [b,i] : a, [Number.MAX_VALUE,-1])
//[0, 3]
সম্পাদনা: কয়েক বছর আগে আমি এটার জবাব দিলাম যা স্থূল, খুব নির্দিষ্ট এবং খুব জটিল। সুতরাং আমি এটি সম্পাদনা করছি। আমি তাদের ঝরঝরে ফ্যাক্টরটির জন্য কার্যকরী উত্তরগুলির পক্ষে, তবে তাদের পাঠযোগ্যতার পক্ষে নয়; তবে আমি যদি জাভাস্ক্রিপ্টের সাথে আরও পরিচিত হয়ে থাকি তবে আমি সেগুলির জন্যও তাদের পছন্দ করতে পারি।
সুডোকোড:
ট্র্যাক সূচক যা সর্বাধিক মান ধারণ করে। ধরুন সূচক 0 প্রাথমিকভাবে বৃহত্তম। বর্তমান সূচকের তুলনায় তুলনা করুন। প্রয়োজনে বৃহত্তম মান সহ সূচক আপডেট করুন।
কোড:
var mountains = [3, 1, 5, 9, 4];
function largestIndex(array){
var counter = 1;
var max = 0;
for(counter; counter < array.length; counter++){
if(array[max] < array[counter]){
max = counter;
}
}
return max;
}
console.log("index with largest value is: " +largestIndex(mountains));
// index with largest value is: 3
function findIndicesOf(haystack, needle)
{
var indices = [];
var j = 0;
for (var i = 0; i < haystack.length; ++i) {
if (haystack[i] == needle)
indices[j++] = i;
}
return indices;
}
পাস array
করার haystack
এবং Math.max(...array)
করতে needle
। এটি অ্যারের সমস্ত সর্বাধিক উপাদান দেবে এবং এটি আরও বর্ধনযোগ্য (উদাহরণস্বরূপ, আপনাকে ন্যূনতম মানগুলিও সন্ধান করতে হবে)
আপনি যদি অ্যারের একটি অনুলিপি তৈরি করেন এবং এটিকে অবতরণে সাজান, তবে অনুলিপিটির প্রথম উপাদানটি বৃহত্তম হবে। আসল অ্যারেতে আপনি এর সূচকটি খুঁজে পেতে পারেন।
var sorted = [...arr].sort((a,b) => b - a)
arr.indexOf(sorted[0])
সময়ের জটিলতা হ'ল অনুলিপিটির জন্য ও (এন), বাছাইয়ের জন্য ও (এন * লগ (এন)) এবং সূচিপত্রের জন্য ও (এন)।
আপনার যদি এটি আরও দ্রুত করার দরকার হয়, রাইয়ের উত্তর হ'ল ও (এন)।
var arr=[0,6,7,7,7];
var largest=[0];
//find the largest num;
for(var i=0;i<arr.length;i++){
var comp=(arr[i]-largest[0])>0;
if(comp){
largest =[];
largest.push(arr[i]);
}
}
alert(largest )//7
//find the index of 'arr'
var arrIndex=[];
for(var i=0;i<arr.length;i++){
var comp=arr[i]-largest[0]==0;
if(comp){
arrIndex.push(i);
}
}
alert(arrIndex);//[2,3,4]
এই ফাংশনটির একটি স্থিতিশীল সংস্করণ এর মতো দেখাচ্ছে:
// not defined for empty array
function max_index(elements) {
var i = 1;
var mi = 0;
while (i < elements.length) {
if (!(elements[i] < elements[mi]))
mi = i;
i += 1;
}
return mi;
}
সহজ
maxarr: function(){
let maxval = 0;
let maxindex = null;
for (i = 0; i < arr.length; i++){
if (arr[i] > maxval) {
maxval = arr[i];
maxindex = i;
}
}
}