Array.prototype.reverse
জায়গায় কোনও অ্যারের সামগ্রীগুলি বিবর্তন করে (রূপান্তর সহ) ...
মূল অ্যারের বিষয়বস্তু পরিবর্তন না করে (রূপান্তর ছাড়াই) অ্যারেটিকে বিপরীত করার জন্য কি একই রকম সহজ কৌশল আছে?
Array.prototype.reverse
জায়গায় কোনও অ্যারের সামগ্রীগুলি বিবর্তন করে (রূপান্তর সহ) ...
মূল অ্যারের বিষয়বস্তু পরিবর্তন না করে (রূপান্তর ছাড়াই) অ্যারেটিকে বিপরীত করার জন্য কি একই রকম সহজ কৌশল আছে?
উত্তর:
আপনি ব্যবহার করতে পারেন ফালি () একটি কপি তারপর করতে বিপরীত () এটা
var newarray = array.slice().reverse();
ES6 এ:
const newArray = [...array].reverse()
[...].reverse
খুব সাধারণ পরীক্ষার ক্ষেত্রে একটি প্রান্ত দেয় বলে মনে হচ্ছে । jsperf.com/reverse-vs-slice-reverse/1
.slice
উল্লেখযোগ্যভাবে দ্রুততর হয়ে উঠছি ।
slice
এটি সম্ভবত দ্রুত / বি / সি [...]
জেনেরিক পুনরাবৃত্ত-টু-অ্যারে তাই অনেকগুলি অনুমান করা যায় না। পাশাপাশি, এটি সম্ভবত slice
দীর্ঘ সময় ধরে চলেছে এমনটি আরও ভালরূপে অনুকূলিত হয়েছে /
আর একটি ES 6 বৈকল্পিক:
আমরা .reduceRight()
আসলে এটির বিপরীত না করে বিপরীত অ্যারে তৈরি করতেও ব্যবহার করতে পারি।
let A = ['a', 'b', 'c', 'd', 'e', 'f'];
let B = A.reduceRight((a, c) => (a.push(c), a), []);
console.log(B);
দরকারী সংস্থানসমূহ:
reduceRight
ধীরে ধীরে
(a, c) => a.concat([c])
এর চেয়ে বেশি মূর্খতা বোধ করে(a, c) => (a.push(c), a)
এই পুনরাবৃত্তি সমাধান চেষ্টা করুন:
const reverse = ([head, ...tail]) =>
tail.length === 0
? [head] // Base case -- cannot reverse a single element.
: [...reverse(tail), head] // Recursive case
reverse([1]); // [1]
reverse([1,2,3]); // [3,2,1]
reverse('hello').join(''); // 'olleh' -- Strings too!
একটি ES6 বিকল্প ব্যবহার .reduce()
এবং ছড়িয়ে পড়ে।
const foo = [1, 2, 3, 4];
const bar = foo.reduce((acc, b) => ([b, ...acc]), []);
মূলত এটি যা করে তা হ'ল foo এ পরবর্তী উপাদান সহ একটি নতুন অ্যারে তৈরি করা এবং খ এর পরে প্রতিটি পুনরাবৃত্তির জন্য সঞ্চিত অ্যারে ছড়িয়ে দেওয়া।
[]
[1] => [1]
[2, ...[1]] => [2, 1]
[3, ...[2, 1]] => [3, 2, 1]
[4, ...[3, 2, 1]] => [4, 3, 2, 1]
বিকল্প .reduceRight()
হিসাবে এখানে উপরে উল্লিখিত হিসাবে, তবে কোনও .push()
রূপান্তর ছাড়াই ।
const baz = foo.reduceRight((acc, b) => ([...acc, b]), []);
পরিবর্তন না করেই অ্যারেটিকে বিপরীত করার একাধিক উপায় রয়েছে। এর মধ্যে দুটি
var array = [1,2,3,4,5,6,7,8,9,10];
// Using Splice
var reverseArray1 = array.splice().reverse(); // Fastest
// Using spread operator
var reverseArray2 = [...array].reverse();
// Using for loop
var reverseArray3 = [];
for(var i = array.length-1; i>=0; i--) {
reverseArray.push(array[i]);
}
পারফরম্যান্স পরীক্ষা http://jsben.ch/guftu
সরল জাভাস্ক্রিপ্ট মধ্যে:
function reverseArray(arr, num) {
var newArray = [];
for (let i = num; i <= arr.length - 1; i++) {
newArray.push(arr[i]);
}
return newArray;
}
ভেরিয়েবল অদলবদলের সাথে জায়গায় কেবল প্রদর্শনের উদ্দেশ্যে বিপরীত হওয়া (তবে যদি আপনি পরিবর্তন করতে চান না তবে আপনার একটি অনুলিপি প্রয়োজন)
const myArr = ["a", "b", "c", "d"];
const copy = [...myArr];
for (let i = 0; i < (copy.length - 1) / 2; i++) {
const lastIndex = copy.length - 1 - i;
[copy[i], copy[lastIndex]] = [copy[lastIndex], copy[i]]
}
es6:
const reverseArr = [1,2,3,4].sort(()=>1)
1
শেষে শূন্যের চেয়ে বড় কিছু হতে পারে, কারণ Array.prototype.sort
কলব্যাক (বা তথাকথিত compare function
) এভাবে কাজ করে। মূলত আপনি সবসময় 2 নম্বর তুলনা এবং এই ক্ষেত্রে তুলনা আয় সবসময় ইতিবাচক তাই এটি সবসময় প্রথম এক সামনে দ্বিতীয় সংখ্যা থেকে সরানো বলে :) এই খুব ব্যাখ্যামূলক হল: stackoverflow.com/questions/6567941/...
sort()
অ্যারেটি পরিবর্তিত করে (অর্থাত্ এটি এটির আকারে সাজায়), যা ওপি এড়াতে চায়।