জাভাস্ক্রিপ্ট অ্যারি উপাদানগুলি অদলবদল করে


228

একটি অ্যারের মধ্যে দুটি উপাদান অদলবদল করার কি আরও সহজ উপায় আছে?

var a = list[x], b = list[y];
list[y] = a;
list[x] = b;

উত্তর:


411

আপনার কেবলমাত্র একটি অস্থায়ী পরিবর্তনশীল প্রয়োজন।

var b = list[y];
list[y] = list[x];
list[x] = b;

সম্পাদন করাআমাদের বেল্টের নীচে প্রচুর ES6 গ্রহণের সাথে 10 বছর পরে শীর্ষ উত্তরের হাইজ্যাকিং :

অ্যারে দেওয়া arr = [1,2,3,4], আপনি এখন এক লাইনে মানগুলি অদলবদল করতে পারেন:

[arr[0], arr[1]] = [arr[1], arr[0]];

এটি অ্যারে উত্পাদন করবে [2,1,3,4]। এটি হ'ল ডেস্ট্রাকচারিং অ্যাসাইনমেন্ট


2
এমনকি ECMAScript Dest ডিস্ট্রাকচারিং অ্যাসাইনমেন্টটি ব্যবহার না করেই অস্থায়ী পরিবর্তনশীল a = [b, b = a][0];দ্বারা বর্তমান স্কোপটিকে দূষিত না করেই আসলে একই সাথে একত্রে স্বাপ অর্জন করতে পারে: @ জ্যানের দ্বারা উল্লেখ করা হয়েছে যদিও আমি এখনও নিজেকে ক্রস-ল্যাঙ্গুয়েজ হিসাবে অস্থায়ী পরিবর্তনশীল পদ্ধতির ব্যবহার খুঁজে পাই (যেমন সি / সি ++ ) এবং প্রথম দৃষ্টিভঙ্গি যা সাধারণত আমার মনে আসে।
Ultimater

3
: আপনি es6 সহ জায়গার (পরিবর্তন ঘটান) এ অদলবদল করতে পারেন অন্যদের নীচে দেখাবে[ list[y], list[x] ] = [ list[x], list[y] ];
protoEvangelion

[arr[0], arr[1]] = [arr[1], arr[0]]কেবলমাত্র [2, 1]বাকি অ্যারে ছাড়াই উত্পাদন করুন
ইয়েরকো পেলমা

8
@ ইয়ারকোপালমা - অভিব্যক্তি ফিরে আসে [২,১], তবে আসল অ্যারেটি [২,১,৩,৪] তে রূপান্তরিত হবে
ড্যানবারস

111

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

var A = [1, 2, 3, 4, 5, 6, 7, 8, 9], x= 0, y= 1;
A[x] = A.splice(y, 1, A[x])[0];
alert(A); // alerts "2,1,3,4,5,6,7,8,9"

সম্পাদনা:

[0]যেমন অভিব্যক্তি শেষে প্রয়োজনীয় Array.splice()আয় একটি অ্যারের, এবং এই অবস্থায় আমরা ফিরে অ্যারের মধ্যে একক উপাদান প্রয়োজন।


3
বিভাজক একটি অ্যারের ফেরত দেয়। সুতরাং আপনার উদাহরণে, অদলবদল অপারেশনের পরে আপনার অ্যারেটি দেখতে আসলে: [[2], 1, 3, 4, 5, 6, 7, 8, 9]
জেপট

1
এ [এক্স] = এস্প্লাইস (y, 1, এ [এক্স]) [0]; ? মটুলগুলিতে অ্যারে.আইপিপ্লিমেন্ট ({অদলবদল: ফাংশন (x, y) y এই [y] = এই.স্প্লাইস (এক্স, 1, এটি [y]) [0];}});
কেন 16

নিশ্চিত করা হয়েছে, [0] অনুপস্থিত।
জোহান ফিলিপ স্ট্রাতাউসেন

সুন্দর এবং সংক্ষিপ্ত, তবে @ ইলগোয়া যেমন বলেছিল, প্রায় ধীরে ধীরে তখন সাধারণ অদলবদল
ofir_aghai

75

মনে হচ্ছে ঠিক আছে ....

var b = list[y];
list[y] = list[x];
list[x] = b;

হোয়ারভার ব্যবহার করে

var b = list[y];

মানে একটি বি ভেরিয়েবল বাকি সুযোগের জন্য উপস্থিত হতে চলেছে। এটি সম্ভবত মেমরি ফাঁস হতে পারে। অসম্ভব, তবে এড়ানো আরও ভাল।

এটিকে অ্যারে.প্রোটোটাইপ.সোপাতে রাখার জন্য একটি ভাল ধারণা

Array.prototype.swap = function (x,y) {
  var b = this[x];
  this[x] = this[y];
  this[y] = b;
  return this;
}

যাকে বলা যেতে পারে:

list.swap( x, y )

এই উভয় একটি পরিষ্কার পন্থা এড়ানো মেমরি তথ্য ফাঁসের এবং শুকনো


আমি এটিও পছন্দ করি অ্যারে.আইম্পিমেন্ট ({স্বাপ: ফাংশন (x, y) {x = এটি [এক্স]; এটি [এক্স] = এটি [y]; এটি [y] = এক্স; এটি ফিরিয়ে দিন;}}))
কেন

1
এটা সুন্দর. কিছু বাউন্ড চেকিং হতে পারে? Array.prototype.swap = function (x,y) { if (x >= 0 && x < this.length && y >= 0 && y < this.length) { var b = this[x]; this[x] = this[y]; this[y] = b; } return this; };
ডেভিড আর।

@DavidR। বাউন্ড চেকিং অতিরিক্ত ও অপ্রয়োজনীয়। কলারের কাছে যদি এটি পছন্দ হয় তবে এ জাতীয় চেক করার জন্য প্রয়োজনীয় সমস্ত কিছু রয়েছে, যদিও বেশিরভাগ ক্ষেত্রে আপনি ইতিমধ্যে জানেন x এবং y এর সীমানায় রয়েছে কারণ আপনি কোনও ধরণের লুপে রয়েছেন।
নীল

6
"সম্ভাব্য মেমরি ফাঁস" এড়াতে পারবেন না কোনও ফাংশনটিতে গুটিয়ে রেখে?
কারসিজেনিকেট

3
সম্ভাব্য "সমতল" দুর্ঘটনা এড়াতে, আমি কোনও বিল্ট-ইন টাইপের প্রোটোটাইপ চেইনটি স্পর্শ করব না।
অ্যারোনড্যান্সার

54

মেটাফিল্টারের কিছু এলোমেলো ব্যক্তির মতে , "জাভাস্ক্রিপ্টের সাম্প্রতিক সংস্করণগুলি আপনাকে আরও ঝরঝরে করে (অন্যান্য জিনিসের মধ্যে) অদলবদল করতে দেয়:"

[ list[x], list[y] ] = [ list[y], list[x] ];

আমার দ্রুত পরীক্ষাগুলি দেখিয়েছে যে এই পাইথোনিক কোডটি বর্তমানে "গুগল অ্যাপস স্ক্রিপ্ট" (".gs") তে ব্যবহৃত জাভাস্ক্রিপ্ট সংস্করণে দুর্দান্ত কাজ করে। হায়রে, আরও পরীক্ষাগুলি দেখায় যে এই কোডটি একটি "অব্যক্ত রেফারেন্স এরিয়ার: অ্যাসাইনমেন্টে অবৈধ বাম-হাত" " জাভাস্ক্রিপ্টের যে কোনও সংস্করণে (".js") গুগল ক্রোম সংস্করণ 24.0.1312.57 মি ব্যবহার করে।


2
এটি ES6 প্রস্তাবের অংশ: এটি এখনও আনুষ্ঠানিকভাবে গৃহীত হয়নি, সুতরাং এটি সর্বত্র কাজ করার জন্য একেবারেই ধারণা করা উচিত নয় (এটি যদি করা যায় তবে এটি দুর্দান্ত হত ...)।
ইসিয়া মিডোস 3'14

2
এটি বর্তমান ফায়ারফক্সের সর্বশেষ সংস্করণে (39.0.3) কাজ করে।
জেমি

2
এটি ক্রোম সংস্করণ 54.0.2840.71 এবং এর আগের সংস্করণগুলিতে কাজ করে। এছাড়াও, এই হওয়া উচিত আপনার পেয়েছিলাম-টু কোড যদি আপনি এই ধরনের একটি ES6 transpiler ব্যবহার Babel
অ্যামিবে

3
এই সমাধান ভালবাসা। পরিষ্কার, উদ্দেশ্য হিসাবে। খুব খারাপ প্রশ্নটি 9 বছর আগে জিজ্ঞাসা করা হয়েছিল ...
ডেভিডস কানাল

2
এটি এস 6 এ মানিক করা হয়েছে এবং এই বৈশিষ্ট্যটিকে ডাস্টস্ট্রাকচারিং বলে called
এএল-জামি

29

ঠিক আছে, আপনার উভয় মান বাফার করার দরকার নেই - কেবলমাত্র একটি:

var tmp = list[x];
list[x] = list[y];
list[y] = tmp;

13
আপনার '
টিএমপি

@ ফির_ঘাই হ্যাঁ, আপনি ঠিক বলেছেন: 10+ বছর আগে, এর আরও 22 সেকেন্ড আগে আরও একটি উত্তর পোস্ট করা হয়েছিল (12: 14: 16Z বনাম 12: 14: 38 জে) ...
মার্ক গ্র্যাভেল

নিয়মিত দিনে, আমি এটির সাথে লেগে ছিলাম। তবে কেবলমাত্র আপনার 10 বছরের সেকেন্ড ইস্যু ও শ্রদ্ধা এখানে পুনরায় শুরু হয়েছে ;-)
ofir_aghai

দুঃখিত, এটি আমাকে ভোট পরিবর্তন করতে দেয় না .. "এই উত্তরটি সম্পাদনা না করা হলে আপনার ভোট এখন লক হয়ে গেছে"
ofir_aghai

22

আপনি নিম্নলিখিত পদ্ধতিতে অ্যারেগুলিতে অদলবদল করতে পারেন:

list[x] = [list[y],list[y]=list[x]][0]

নিম্নলিখিত উদাহরণটি দেখুন:

list = [1,2,3,4,5]
list[1] = [list[3],list[3]=list[1]][0]
//list is now [1,4,3,2,5]

দ্রষ্টব্য: এটি নিয়মিত ভেরিয়েবলের জন্য একইভাবে কাজ করে

var a=1,b=5;
a = [b,b=a][0]

6
এই অদ্ভূত ES6 (জাভাস্ক্রিপ্ট এর পরবর্তী সংস্করণ) এ এই কাজ করতে মান সঠিক উপায় অনুরূপ: [list[x], list[y]] = [list[y], list[x]];
ইসিয়া মিডোস 3'14

1
এটি ডি-স্ট্রাকচারিংয়ের মাধ্যমে আমরা ES6 অ্যারে অদলবদল করার কিছু পাইনি। এটি জেএস কর্মপ্রবাহের কেবল একটি চতুর ব্যবহার। আপনি যদি ইনলাইন কোডিং ঘন ঘন ব্যবহার করেন তবে একটি সুন্দর অদলবদলের ধরণ, যেমনthis[0] > this[1] && (this[0] = [this[1],this[1]=this[0]][0]);
রেডু

18

সংখ্যার মানগুলির সাহায্যে আপনি বিটওয়াইজ জোর ব্যবহার করে একটি অস্থায়ী পরিবর্তনশীল এড়াতে পারবেন

list[x] = list[x] ^ list[y];
list[y] = list[y] ^ list[x];
list[x] = list[x] ^ list[y];

বা একটি গাণিতিক যোগফল (উল্লেখ করে যে এটি কেবল তখনই কাজ করে যদি x + y ডাটা টাইপের সর্বাধিক মানের চেয়ে কম হয়)

list[x] = list[x] + list[y];
list[y] = list[x] - list[y];
list[x] = list[x] - list[y];

2
ভাদরের মতোই কি সেই দার্ত? +1
ক্রোসনভোল্ড

7
কিছু একটা সমস্যা. না list[y] = list[x] - list[x];শুধু সমার্থক list[y] = 0;?
এরিক

3
Xor ট্রিকটিও ব্যর্থ হয় যখন x = y - যখন এটি তালিকাটিকে [x] শূন্যে সেট করে, আপনি যখন আশা করতে পারেন যে এটি মূল মানটি [x] তালিকা রাখে।
ডেভিড ক্যারি

1
প্রযুক্তিগতভাবে আপনি একটি অস্থায়ী মান তৈরি করেন যা আপনি এটি অ্যারের প্রাসঙ্গিক অঞ্চলের বাইরে সরাবেন না।
স্মিট

1
না সহজ, না আরও দক্ষ, না জেনেরিক।
লোগানমজ

17

যখন প্রশ্ন জিজ্ঞাসা করা হয়েছিল তখন এটি উপস্থিত ছিল না, তবে ES2015 আপনাকে অ্যারে ডেস্ট্রাকচারিংয়ের সূচনা করেছিল, আপনাকে এটি নীচে লিখতে দিয়েছিলেন:

let a = 1, b = 2;
// a: 1, b: 2
[a, b] = [b, a];
// a: 2, b: 1

14
অ্যারের ভিতরে এটির মতো অদলবদল করতে:[list[x], list[y]] = [list[y], list[x]];
স্ট্রোমাটা

15

অ্যারের টানা দুটি উপাদান অদলবদল করতে

array.splice(IndexToSwap,2,array[IndexToSwap+1],array[IndexToSwap]);

13

Http://www.greywyvern.com/?post=265 থেকে ডাইজেস্ট

var a = 5, b = 9;    
b = (a += b -= a) - b;    
alert([a, b]); // alerts "9, 5"

1
আপনি যদি এটি কোনও swap(a, b)ফাংশনে আবদ্ধ করেন তবে আপনার পঠনযোগ্যতা নিয়ে চিন্তা করার দরকার নেই।
দুর্ঘটনাজনিত

1
শুধুমাত্র পূর্ণসংখ্যার জন্য কাজ করে
রেডু

এটি সম্ভবত খারাপভাবে অনুকূলিত হয়। একটি সংকলক এটিকে "অদলবস্তু" হিসাবে সনাক্ত করতে পারে, তবে প্রভাবগুলি সম্পর্কে নিশ্চিত হওয়া যায় না যতক্ষণ না এটি নিশ্চিত হওয়া যায় যে উভয় প্রকারের অন্তরঙ্গ রয়েছে এবং এটিরও নয় যে তারা উপনাম নয় ।
mwfearnley


9

তৃতীয় ভেরিয়েবল সংজ্ঞায়িত করার প্রয়োজন ছাড়াই এ জাতীয় সমাধান বিবেচনা করুন:

function swap(arr, from, to) {
  arr.splice(from, 1, arr.splice(to, 1, arr[from])[0]);
}

var letters = ["a", "b", "c", "d", "e", "f"];

swap(letters, 1, 4);

console.log(letters); // ["a", "e", "c", "d", "b", "f"]

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


সংযোজন হিসাবে, স্প্রেড অপারেটরটিও ব্যবহার করা যেতে পারে:arr.splice(from, 1, arr.splice(to, 1, ...arr[from]))
অরকুন তুজেল

7

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

var swap = function (x){return x};
b = swap(a, a=b);
c = swap(a, a=b, b=c);

আপনার সমস্যার জন্য:

var swap = function (x){return x};
list[y]  = swap(list[x], list[x]=list[y]);

এটি জাভাস্ক্রিপ্টে কাজ করে কারণ এটি ঘোষিত বা ব্যবহৃত না হলেও এটি অতিরিক্ত যুক্তি গ্রহণ করে। কার্যাদি অ্যাসাইনমেন্ট a=bইত্যাদির পরে ঘটবে a


Hackish ... কিন্তু আপনি এক ভালো করতে পারে, আপনি শুধুমাত্র ফাংশন একবার ব্যবহার করছেন: list[y] = (function(x){return x})(list[x],list[x]=list[y]);। অথবা, যদি আপনি ES6 (জাতীয় পরবর্তী সংস্করণ) প্রতি আগ্রহ দেখিয়েছেন, এটা অন্যন্ত সহজ: [list[x], list[y]] = [list[y], list[x]। আমি খুব খুশি যে তারা জাভাস্ক্রিপ্টের পরবর্তী সংস্করণে আরও কিছু কার্যকরী এবং শ্রেণিভিত্তিক দিকগুলি যুক্ত করছে।
ইসিয়া মিডোস

6

দুই বা ততোধিক উপাদানগুলির জন্য (স্থির সংখ্যা)

[list[y], list[x]] = [list[x], list[y]];

কোন অস্থায়ী পরিবর্তনশীল প্রয়োজন!

আমি কেবল কল করার কথা ভাবছিলাম list.reverse()
তবে তখন আমি বুঝতে পারি এটি কেবল তখনই বদলে যাবে list.length = x + y + 1

উপাদানগুলির পরিবর্তনশীল সংখ্যার জন্য

আমি মানচিত্র এবং মানচিত্র সহ বিভিন্ন আধুনিক জাভাস্ক্রিপ্ট নির্মাণের দিকে নজর রেখেছি , তবে দুর্ভাগ্যক্রমে কোনওটিই এমন কোডের ফলস্বরূপ ফল লাভ করতে পারেনি যা এই পুরাতন, লুপ-ভিত্তিক নির্মাণের চেয়ে আরও কমপ্যাক্ট বা দ্রুততর ছিল:

function multiswap(arr,i0,i1) {/* argument immutable if string */
    if (arr.split) return multiswap(arr.split(""), i0, i1).join("");
    var diff = [];
    for (let i in i0) diff[i0[i]] = arr[i1[i]];
    return Object.assign(arr,diff);
}

Example:
    var alphabet = "abcdefghijklmnopqrstuvwxyz";
    var [x,y,z] = [14,6,15];
    var output = document.getElementsByTagName("code");
    output[0].innerHTML = alphabet;
    output[1].innerHTML = multiswap(alphabet, [0,25], [25,0]);
    output[2].innerHTML = multiswap(alphabet, [0,25,z,1,y,x], [25,0,x,y,z,3]);
<table>
    <tr><td>Input:</td>                        <td><code></code></td></tr>
    <tr><td>Swap two elements:</td>            <td><code></code></td></tr>
    <tr><td>Swap multiple elements:&nbsp;</td> <td><code></code></td></tr>
</table>


5

অদলবদলের একটি আকর্ষণীয় উপায় রয়েছে:

var a = 1;
var b = 2;
[a,b] = [b,a];

(ES6 উপায়)


5
একটি অ্যারের জন্য, এটি আরও বেশিvar a= [7,8,9,10], i=2, j=3;[a[i],a[j]] = [a[j],a[i]];
18-18 এ কউব করুন


3

এখানে এমন এক-লাইনার রয়েছে যা রূপান্তর করে না list:

let newList = Object.assign([], list, {[x]: list[y], [y]: list[x]})

(প্রশ্ন পোস্ট করার সময় ভাষা বৈশিষ্ট্যগুলি ২০০৯-এ উপলব্ধ নয়!)


1

এখানে একটি কমপ্যাক্ট সংস্করণ i1 এ আরআর i2 সহ মান অদলবদল

arr.slice(0,i1).concat(arr[i2],arr.slice(i1+1,i2),arr[i1],arr.slice(i2+1))

এটি কম দক্ষ তবে অস্থায়ী পরিবর্তনশীল পদ্ধতি। আপনি কার্যকরভাবে পরিবর্তিত অ্যারেটি ফিরে আসছেন যা তিনবার কাটা এবং তিনটি কাটা অ্যারের মধ্যে দুটি বস্তুর সাথে একত্রে সংমিশ্রণ করা হয়েছিল। সহজভাবে অ্যারেগুলিকে নির্ধারণের জন্য মান পাওয়ার জন্য আপনি কার্যকরভাবে মেমরির দ্বিগুণেরও বেশি কার্যকর প্রয়োজন (এর কোনওটি তার আগে করা হয়নি)।
ইসিয়া মিডোস 3'14

1

এখানে একটি প্রকরণ রয়েছে যা সূচকের অ্যারেতে উপস্থিত রয়েছে কিনা তা প্রথমে পরীক্ষা করে:

Array.prototype.swapItems = function(a, b){
    if(  !(a in this) || !(b in this) )
        return this;
    this[a] = this.splice(b, 1, this[a])[0];
    return this;
}

thisসূচকটি উপস্থিত না থাকলে এটি কেবলমাত্র ফিরে আসবে তবে আপনি ব্যর্থতার সাথে আচরণটি সহজেই সংশোধন করতে পারেন


1

অস্থায়ী পরিবর্তনশীল বা ES6 অদলবদল পদ্ধতি ছাড়াই একটি অ্যারেতে প্রথম এবং শেষ উপাদানটি অদলবদল করুন [a, b] = [b, a]

[a.pop(), ...a.slice(1), a.shift()]


1

টাইপস্ক্রিপ্ট সমাধান যা বিদ্যমানটির পরিবর্তনের পরিবর্তে অ্যারের ক্লোন করে

export function swapItemsInArray<T>(items: T[], indexA: number, indexB: number): T[] {
  const itemA = items[indexA];

  const clone = [...items];

  clone[indexA] = clone[indexB];
  clone[indexB] = itemA;

  return clone;
}

0

কেবল এটির মজাদার জন্য, কোনও অতিরিক্ত ভেরিয়েবল ব্যবহার না করে অন্য উপায় হ'ল:

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];

// swap index 0 and 2
arr[arr.length] = arr[0];   // copy idx1 to the end of the array
arr[0] = arr[2];            // copy idx2 to idx1
arr[2] = arr[arr.length-1]; // copy idx1 to idx2
arr.length--;               // remove idx1 (was added to the end of the array)


console.log( arr ); // -> [3, 2, 1, 4, 5, 6, 7, 8, 9]


0

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

প্রদত্ত:

var foo = [ 0, 1, 2, 3, 4, 5, 6 ];

আপনি যদি দুটি সূচকের (অ এবং খ) মান পরিবর্তন করতে চান; তাহলে এটি এটি করবে:

foo.splice( a, 1, foo.splice(b,1,foo[a])[0] );

উদাহরণস্বরূপ, আপনি যদি 3 এবং 5 কে অদলবদল করতে চান তবে আপনি এটি এইভাবে করতে পারেন:

foo.splice( 3, 1, foo.splice(5,1,foo[3])[0] );

অথবা

foo.splice( 5, 1, foo.splice(3,1,foo[5])[0] );

উভয়ই একই ফলাফল দেয়:

console.log( foo );
// => [ 0, 1, 2, 5, 4, 3, 6 ]

#splicehatersarepunks :)


0

আপনি যদি ES5 তে টেম্প ভেরিয়েবল ব্যবহার করতে না চান তবে অ্যারের উপাদানগুলিকে অদলবদল করার এটি একটি উপায়।

var swapArrayElements = function (a, x, y) {
  if (a.length === 1) return a;
  a.splice(y, 1, a.splice(x, 1, a[y])[0]);
  return a;
};

swapArrayElements([1, 2, 3, 4, 5], 1, 3); //=> [ 1, 4, 3, 2, 5 ]

এইভাবে, একটি টেম্প ভেরিয়েবল তৈরির পরিবর্তে আপনি 2 টি নতুন অ্যারে তৈরি a.spliceকরছেন কারণ সরানো উপাদানগুলির সাথে অ্যারে প্রদান করে। বিকাশকারী.মোজিলা.আর.ইন-
ইউএস

এমন কোনও উপায় আছে যা আমরা এটি আরও ভালভাবে করতে পারি? @Cristy
ভেনক্যাট 7668

স্বীকৃত উত্তর হ'ল সরাসরি এগিয়ে one যখন আপনার ভেরিয়েবলের ঘোষণার (বেশিরভাগ সাক্ষাত্কারের উদ্দেশ্যে :) সীমাবদ্ধতা থাকে তখন এটি কার্যকর হবে। আপনি যেমন উল্লেখ করেছেন তেমন মেমরি কার্যকর নয়। @Cristy
ভেঙ্ক্যাট 7668

আমি ব্যক্তিগতভাবে মনে করি এটি একটি খারাপ অনুশীলন এবং নতুনদের কাছে সুপারিশ করা উচিত নয়। এটি পড়া খুব কঠিন।
এক্সসিএস 27'19

0

এই ফাংশন চেষ্টা করুন ...

$(document).ready(function () {
        var pair = [];
        var destinationarray = ['AAA','BBB','CCC'];

        var cityItems = getCityList(destinationarray);
        for (var i = 0; i < cityItems.length; i++) {
            pair = [];
            var ending_point = "";
            for (var j = 0; j < cityItems[i].length; j++) {
                pair.push(cityItems[i][j]);
            }
            alert(pair);
            console.log(pair)
        }

    });
    function getCityList(inputArray) {
        var Util = function () {
        };

        Util.getPermuts = function (array, start, output) {
            if (start >= array.length) {
                var arr = array.slice(0);
                output.push(arr);
            } else {
                var i;

                for (i = start; i < array.length; ++i) {
                    Util.swap(array, start, i);
                    Util.getPermuts(array, start + 1, output);
                    Util.swap(array, start, i);
                }
            }
        }

        Util.getAllPossiblePermuts = function (array, output) {
            Util.getPermuts(array, 0, output);
        }

        Util.swap = function (array, from, to) {
            var tmp = array[from];
            array[from] = array[to];
            array[to] = tmp;
        }
        var output = [];
        Util.getAllPossiblePermuts(inputArray, output);
        return output;
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


0

var arr = [1, 2];
arr.splice(0, 2, arr[1], arr[0]);
console.log(arr); //[2, 1]


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

-1

ES6 ব্যবহার করে এটি এটি করা সম্ভব ...

কল্পনা করুন আপনার এই 2 টি অ্যারে রয়েছে ...

const a = ["a", "b", "c", "d", "e"];
const b = [5, 4, 3, 2, 1];

এবং আপনি প্রথম মানগুলি অদলবদল করতে চান:

const [a0] = a;
a[0] = b[0];
b[0] = a0;

এবং মান:

a; //[5, "b", "c", "d", "e"]
b; //["a", 4, 3, 2, 1]

-2
Array.prototype.swap = function(a, b) {
  var temp = this[a];
  this[a] = this[b];
  this[b] = temp;
};

ব্যবহার:

var myArray = [0,1,2,3,4...];
myArray.swap(4,1);

1
অভদ্র হওয়ার দরকার নেই। এছাড়াও, Arrayপ্রোটোটাইপ প্রসারিত করা যা চাওয়া হয়েছিল তার অংশ ছিল না - এটি ভাল করার চেয়ে আরও বেশি বিভ্রান্ত হতে পারে।
ম্যাথিয়াস লাইককেগার্ড লরেনজেন

কীভাবে প্রকাশ করা হচ্ছে যে উত্তরগুলির কিছু উত্তেজনাপূর্ণ এবং অ্যারের প্রোটোটাইপটি প্রসারিত হবে এবং একটি রিটার্ন যুক্ত করার ফলে এটি শৃঙ্খলাটিকে সক্ষম করে
তুলবে

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

1
গ্যাচা, দুঃখিত আমার শৃঙ্খলা কখনও কখনও জুটি হয় না ^ _ ^
ব্যবহারকারী 2472643

2
আপনি শুধুমাত্র সেই উত্তরের প্রসঙ্গে সমস্যা বর্ণনা করছেন ... প্রথমে নেতিবাচক স্কোরগুলি অ কর্মক্ষম উত্তরের জন্য সংরক্ষণ করা উচিত। দ্বিতীয় এটি একটি মার্জিত ব্যবহারের সাথে একটি ভাল উত্তর যা কোনও দ্বন্দ্ব সৃষ্টি করে না। বিতরণ না করে কোডটি বিচার করুন। এছাড়াও আমার উত্তরে যদি আপনি এটিকে সরিয়ে ফেলে এবং প্রোটোটাইপ এক্সটেনশানটি বাদ দেন তবে এটি সর্বাধিক আপ করা ভোটের উত্তরের সমান হয়ে যায়, সুতরাং এটি -6 হ'ল এটিকে ভোট দেওয়া লোকদের মধ্যে চিন্তার অভাব দেখায় shows এবং শীর্ষ উত্তরের কয়েক মাস আগে পোস্ট করা হয়েছিল ... সুতরাং এটি জনপ্রিয়তার মতো মনে হচ্ছে কোড প্রতিযোগিতা নয়।
ব্যবহারকারী 2472643

-3

যদি প্রয়োজন হয় তবে প্রথম এবং শেষ উপাদানগুলি কেবলমাত্র অদলবদল করুন:

array.unshift( array.pop() );

এই কোড ত্রুটিযুক্ত। এটি অ্যারের শেষ উপাদানটি নেয় তারপরে এটি শুরুতে রাখে, এটি অদলবদল হয় না। এই কোডটি এটি করে: [1, 2, 3] => [3, 1, 2]পরিবর্তে [1, 2, 3] => [3, 2, 1]
ডেভিড আর্কিবাল্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.