जावास्क्रिप्ट स्वैप सरणी तत्व


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 6 के विनाशकारी असाइनमेंट का उपयोग किए बिना भी, वास्तव में एक अस्थायी चर के साथ वर्तमान गुंजाइश को प्रदूषित किए बिना एक साथ स्वैप प्राप्त कर सकता है: a = [b, b = a][0];जैसा कि @Jan द्वारा बताया गया है हालांकि मैं अभी भी खुद को अस्थायी चर दृष्टिकोण का उपयोग कर पाता हूं क्योंकि यह क्रॉस-लैंग्वेज (जैसे C / C ++) है ) और पहला दृष्टिकोण जो आमतौर पर मेरे दिमाग में आता है।
अल्टीमेटर

3
आप एस्क 6 में जगह बदल सकते हैं (जैसे कि नीचे) दूसरे दिखा सकते हैं:[ list[y], list[x] ] = [ list[x], list[y] ];
प्रोटॉवेंजेलियन

[arr[0], arr[1]] = [arr[1], arr[0]]केवल [2, 1]शेष सरणी के बिना उत्पादन करें
येरको पाल्मा

8
@ यरकोप्लामा - अभिव्यक्ति वापस आती है [2,1], लेकिन मूल सारणी को [2,1,3,4] में बदल दिया जाएगा
danbars

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
विभाजन एक सरणी देता है। इसलिए आपके उदाहरण में, स्वैप ऑपरेशन के बाद आपका सरणी वास्तव में दिखता है: [[२], १, ३, ४, ५, ६,
after

1
ए [एक्स] = ए। सल्पिस (वाई, 1, ए [एक्स]) [०]; ? mootools में Array.implement ({स्वैप: फ़ंक्शन (x, y) {यह [y] = this.splice (x, 1, यह [y]) [0];}});
केन

पुष्टि की गई, [0] गायब है।
जोहान फिलिप स्ट्रैटहॉस

अच्छा और छोटा, लेकिन जैसा कि @aelgoa ने कहा, लगभग धीमी तो साधारण स्वैप
ofir_aghai

75

यह ठीक लगता है ...।

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

हावेर का उपयोग करना

var b = list[y];

इसका मतलब है कि एक बी वेरिएबल बाकी स्कोप के लिए मौजूद होने वाला है। यह संभावित रूप से मेमोरी रिसाव को जन्म दे सकता है। गैर-जरूरी, लेकिन फिर भी बचने के लिए बेहतर है।

हो सकता है कि इसे Array.prototype.swap में डालने का एक अच्छा विचार हो

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

जिसे इस प्रकार कहा जा सकता है:

list.swap( x, y )

यह मेमोरी लीक और DRY दोनों से बचने का एक साफ तरीका है ।


मुझे भी यह पसंद है। Array.implement ({स्वैप: फ़ंक्शन (x, y) {x = यह [x]; यह [x] = यह [y]; यह [y] = x; इसे वापस लौटें;}}};
केन

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] ];

मेरे त्वरित परीक्षणों से पता चला कि यह पायथन कोड जावास्क्रिप्ट के संस्करण में बहुत अच्छा काम करता है जो वर्तमान में "Google Apps स्क्रिप्ट" (".gs") में उपयोग किया जाता है। काश, आगे के परीक्षणों से पता चलता है कि यह कोड एक "अनट्रीफर्ड रेफरेंसर्रर: अवैध बाएं हाथ का काम" देता है। जावास्क्रिप्ट के किसी भी संस्करण में (".js") का उपयोग Google Chrome संस्करण 24.0.1312.57 मीटर है।


2
यह ES6 प्रस्ताव का हिस्सा है: यह अभी तक औपचारिक नहीं है, इस प्रकार इसे हर जगह काम करने के लिए बिल्कुल नहीं माना जाना चाहिए (यदि यह किया जाता तो यह भयानक होगा ...)।
इशायाह

2
यह वर्तमान फ़ायरफ़ॉक्स नवीनतम संस्करण (39.0.3) में काम करता है।
जेमी

2
यह क्रोम संस्करण 54.0.2840.71 और पुराने संस्करणों में काम करता है। इसके अलावा, इस होना चाहिए अपने मिला-टू कोड यदि आप इस तरह के रूप में एक ES6 transpiler का उपयोग कोलाहल
एमोबी

3
इस घोल से प्यार करें। जैसा कि साफ है। बहुत बुरा सवाल 9 साल पहले पूछा गया था ...
डेविडसाल

2
इसे es6 में मानकीकृत किया गया है और इस सुविधा को विनाशकारी कहा जाता है।
AL-zami

29

ठीक है, आपको दोनों मूल्यों को बफर करने की आवश्यकता नहीं है - केवल एक:

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

13
आपका 'tmp' तब उपयोग करने के लिए अधिक उचित लगता है 'b'
mtasic85

@ofir_aghai हाँ, तुम सही हो: 10+ साल पहले, एक और उत्तर पोस्ट किया गया 22 सेकंड इस एक (: 14: 16Z बनाम 12: 14: 12 38Z) से पहले ...
मार्क Gravell

नियमित दिन में, मैं इसके साथ रहना था। लेकिन सिर्फ इसलिए कि सेकंड्स इश्यू और आपके 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]];
इशायाह

1
हमें डी-स्ट्रक्चरिंग द्वारा ईएस 6 सरणी स्वैप करने के लिए कुछ भी नहीं मिला है। यह जेएस वर्कफ़्लो का सिर्फ एक चतुर उपयोग है। एक सुंदर स्वैप पैटर्न यदि आप बार-बार इनलाइन कोडिंग का उपयोग करते हैं, जैसेthis[0] > this[1] && (this[0] = [this[1],this[1]=this[0]][0]);
Redu

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
krosenvold

7
कुछ गड़बड़ है। list[y] = list[x] - list[x];बस के बराबर नहीं है list[y] = 0;?
एरिक

3
जब x = y - xor ट्रिक भी विफल हो जाता है, तो यह सूची [x] को शून्य पर सेट करता है, जब आप यह उम्मीद कर सकते हैं कि यह सूची [x] को मूल मूल्य रखे।
डेविड कैरी

1
तकनीकी रूप से आप एक अस्थायी मूल्य बनाते हैं जो आप इसे सरणी के प्रासंगिक क्षेत्र से बाहर नहीं ले जाते हैं।
मार्क स्मिट

1
न सरल, न अधिक कुशल, न ही सामान्य।
LoganMzz

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)फ़ंक्शन में लपेटते हैं, तो आपको पठनीयता के बारे में चिंता करने की आवश्यकता नहीं है।
AccidentalTaylorExpansion

1
केवल पूर्णांकों के लिए काम करता है
Redu

यह शायद खराब अनुकूलन करता है। एक कंपाइलर इसे "स्वैप मुहावरा" के रूप में पहचान सकता है, लेकिन प्रभावों के बारे में सुनिश्चित नहीं किया जा सकता है जब तक कि यह सुनिश्चित नहीं किया जा सकता है कि दोनों प्रकार के ints हैं, और यह भी कि वे उपनाम नहीं करते हैं ।
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]);:। या, यदि आप ईएस 6 (जेएस के अगले संस्करण) में रुचि रखते हैं, तो यह बेहद आसान है [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];

(ईएस 6 रास्ता)


5
एक सरणी के लिए, यह अधिक हैvar a= [7,8,9,10], i=2, j=3;[a[i],a[j]] = [a[j],a[i]];
caub


3

यहाँ एक लाइनर है जो उत्परिवर्तित नहीं करता है list:

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

(2009 में उपयोग की जाने वाली भाषा सुविधाएँ जब प्रश्न पोस्ट किया गया था!)


1

यहाँ i1 में एक कॉम्पैक्ट वर्जन स्वैप वैल्यू है जो i2 के साथ अरेस्ट है

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

यह कम कुशल है तो अस्थायी चर विधि है। आप प्रभावी रूप से एक संशोधित सरणी लौटा रहे हैं जो तीन बार कटा हुआ था और तीन कटा हुआ सरणियों के बीच दो वस्तुओं के साथ मिलाया गया था। आपको प्रभावी रूप से सरणी को असाइन करने के लिए मान प्राप्त करने के लिए आवश्यक मेमोरी की तुलना में दोगुने से अधिक आवश्यक है (इनमें से कोई भी नहीं किया गया था)।
इशायाह

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 ]

इस तरह, एक अस्थायी चर बनाने के बजाय आप a.spliceहटाए गए तत्वों के साथ एक सरणी के रूप में 2 नए सरणियां बना रहे हैं । developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
XCS

क्या कोई ऐसा तरीका है जिससे हम इसे बेहतर कर सकते हैं? @Cristy
venkat7668

स्वीकृत उत्तर सीधे एक आगे है। यह तब आसान होगा जब आपके पास चर घोषणा की संख्या (ज्यादातर साक्षात्कार उद्देश्य :)) पर एक सीमा होगी। लेकिन स्मृति कुशल नहीं जैसा कि आपने उल्लेख किया है। @Cristy
venkat7668

मुझे व्यक्तिगत रूप से लगता है कि यह एक बुरा अभ्यास है और इसे शुरुआती लोगों के लिए अनुशंसित नहीं किया जाना चाहिए। इसे पढ़ना भी बहुत कठिन है।
XCS

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
हालांकि यह कोड स्निपेट प्रश्न को हल कर सकता है, जिसमें स्पष्टीकरण सहित वास्तव में आपकी पोस्ट की गुणवत्ता में सुधार करने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और उन लोगों को आपके कोड सुझाव के कारणों का पता नहीं चल सकता है।
Alessio

-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प्रोटोटाइप को विस्तारित करना उस चीज का हिस्सा नहीं था जो इसके लिए कहा गया था - यह अच्छा होने से अधिक भ्रमित कर सकता है।
मैथियास लाइकेगार्ड लोरेनजेन

यह कैसे व्यक्त किया जा रहा है कि कुछ उत्तर पागल हैं और सरणी प्रोटोटाइप का विस्तार कर रहे हैं और एक वापसी जोड़ने से यह श्रृंखला में सक्षम हो जाएगा ...
user2472643

2
आप इसे "सही तरीका" के रूप में व्यक्त कर रहे हैं। यह गलत धारणा दे सकता है। इसके बजाय, मैं यह उल्लेख करने का सुझाव दूंगा कि आप क्या कर रहे हैं (प्रोटोटाइप का विस्तार), और यह कैसे उपयोगी है, ठीक वैसे ही जैसे आपने अभी मुझे बताया है।
मथियास लिकेगार्ड लोरेनजेन

1
गोच, सॉरी मेरी
कविता

2
आप उत्तर के संदर्भ में एक समस्या का वर्णन करने वाले एकमात्र व्यक्ति हैं ... पहले नकारात्मक अंक को गैर-कामकाजी उत्तरों के लिए आरक्षित किया जाना चाहिए। दूसरा यह एक सुंदर उपयोग के साथ एक अच्छा जवाब है जो किसी भी संघर्ष का कारण नहीं है। कोड का वितरण न करें। मेरे उत्तर में भी अगर आपने इसे नीचे गिरा दिया और प्रोटोटाइप एक्सटेंशन को छोड़ दिया तो यह सटीक रूप से सबसे अधिक मतदान वाले उत्तर के समान हो जाता है, इसलिए यह तथ्य है कि यह -6 उन लोगों से विचार की कमी को दर्शाता है जिन्होंने इसे वोट दिया था। और शीर्ष उत्तर के महीनों पहले पोस्ट किया गया था ... तो यह एक लोकप्रियता की तरह लगता है एक कोड प्रतियोगिता नहीं।
user2472643

-3

अगर केवल पहले और अंतिम तत्वों की अदला-बदली की जरूरत है:

array.unshift( array.pop() );

यह कोड त्रुटिपूर्ण है। यह सरणी का अंतिम तत्व लेता है, फिर इसे शुरुआत में रखता है, जो कि स्वैपिंग नहीं है। यह कोड ऐसा करता है: के [1, 2, 3] => [3, 1, 2]बजाय [1, 2, 3] => [3, 2, 1]
डेविड आर्किबाल्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.