जावास्क्रिप्ट में अलग-अलग चर में सरणी खोलना


141

यह एक साधारण समस्या है, और मैंने इसे पहले भी किया है। मुझे अभी याद नहीं है कि कैसे, या वास्तव में इसे क्या कहा गया था।

अजगर में मैं यह कर सकता हूँ:

arr = ['one', 'two']
one, two = arr

मैं जावास्क्रिप्ट में कैसे करूँ?

जवाबों:


173

यह वर्तमान में एकमात्र क्रॉस-ब्राउज़र-संगत समाधान AFAIK है:

var one = arr[0],
    two = arr[1];

ES6 विनाशकारी असाइनमेंट की अनुमति देगा:

let [x, y] = ['foo', 'bar'];
console.log(x); // 'foo'
console.log(y); // 'bar'

या, अपने प्रारंभिक उदाहरण से चिपके रहने के लिए:

var arr = ['one', 'two'];
var [one, two] = arr;

आप एक डिफ़ॉल्ट मान भी बना सकते हैं:

const [one = 'one', two = 'two', three = 'three'] = [1, 2];
console.log(one); // 1
console.log(two); // 2
console.log(three); // 'three'

5
विनाशकारी असाइनमेंट को आज kangax.github.io/compat-table/es6/#test-destructuring के
भव्य

20

यह विनाशकारी काम है । आप इसे निम्न सिंटैक्स वाले कुछ ब्राउज़रों में कर सकते हैं:

[one, two] = arr;

यह नवीनतम ब्राउज़र और तरह transpilers में से कुछ में समर्थित है कोलाहल और Traceur । यह ECMAScript 4 के साथ शुरू की गई एक विशेषता थी जो बाद में ECMAScript हार्मोनी बन गई, जो अंततः ES 2015 बन गई।


ऐसा लगता है कि यह ES6 (2015) का हिस्सा है, ES4 का नहीं? ecma-international.org/ecma-262/6.0/…
jab

@ पंजाब: धन्यवाद! कभी-कभी ये पुराने उत्तर भूल जाते हैं और पुराने हो जाते हैं, हालांकि ऐसा लगता है कि माथिया ने पहले ही अपने उत्तर में यह जानकारी जोड़ दी :)
एंडी ई

19

प्रश्न पुराना है, लेकिन मैं इस विकल्प (2016) समाधान को पोस्ट करना पसंद करता हूं: एक भी प्रसार ऑपरेटर "..." का उपयोग कर सकता है ।

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator

let xAndY = [42, 1337];
let f = function(x, y) { return x + y; };
f(...xAndY);

6

यदि आप एरे आइटम को फ़ंक्शन आर्गुमेंट के रूप में पास करना चाहते हैं, तो आप ऐरे के फंक्शन का उपयोग कर सकते हैं।


4
मुझे यकीन नहीं है कि जावास्क्रिप्ट Arrayमें एक .apply()फ़ंक्शन है। मुझे लगता है कि आपका मतलब था some_function.apply(this, my_array)। इस उत्तर को
किट

5

गंभीर के विचार का कार्यान्वयन।

http://jsfiddle.net/RichAyotte/6D2wP/

(function(a, b, c, d) {
    console.log(a, b, c, d);   
}.apply(this, ['a', 'b', 'c', 'd']));

इसने मेरा दिन बना दिया। लागू के माध्यम से सूचियों को खोलना, अच्छी तरह से किया गया सर!
mike239x

2
var one = arr[0];
var two = arr[1];

1
आपको वास्तव varमें वैश्विक दायरे को बदलने से चर को रोकने के लिए उपयोग करना चाहिए ।
मथियास बीनेंस

मैं सिर्फ इसके सभी घोषित चर मान रहा हूँ :)
9:00 पर waminal

संभवतः varदो अलग-अलग varघोषणाओं के बजाय एक ही दायरे में सभी स्कोर्स को घोषित करना बेहतर होगा ।
मथियास ब्येनेंस

2

कॉफीस्क्रिप्ट में यह है: http://jashkenas.github.com/cfish-script/#pattern_matching

और, पृष्ठ के शीर्ष से उद्धृत:

"कॉफीस्क्रिप्ट एक छोटी सी भाषा है जो जावास्क्रिप्ट में संकलित है। इसे जावास्क्रिप्ट के कम अस्थिर बच्चे के भाई के रूप में सोचें - एक ही जीन, लगभग एक ही ऊंचाई, लेकिन शैली का एक अलग अर्थ। बोनस उपहारों के एक मुट्ठी भर के अलावा, कॉफीस्क्रिप्ट में एक बयान। -जावास्क्रिप्ट में अपने समकक्ष के साथ एक, यह कहने का सिर्फ एक और तरीका है। "


1
इस सवाल का जवाब नहीं है। मैं सराहना करता हूं कि कॉफीस्क्रिप्ट में कुछ साफ-सुथरी चीजें हैं, लेकिन सवाल जावास्क्रिप्ट के बारे में है।
होविस बिडल

मृत लिंक: (((
पॉल ड्रेपर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.