Membongkar array menjadi variabel terpisah di JavaScript


144

Ini adalah masalah sederhana, dan saya pernah melakukannya sebelumnya. Saya hanya tidak ingat bagaimana, atau apa sebenarnya sebutan itu.

Dengan python saya bisa melakukan ini:

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

bagaimana cara melakukannya di JavaScript?

Jawaban:


178

Saat ini ini adalah satu-satunya solusi AFAIK yang kompatibel lintas-browser:

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

ES6 akan memungkinkan tugas destrukturisasi:

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

Atau, untuk tetap berpegang pada contoh awal Anda:

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

Anda juga dapat membuat nilai default:

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

5
tugas destrukturisasi memiliki dukungan penuh mulai hari ini kangax.github.io/compat-table/es6/#test-destructuring
grandrew

21

Itu tugas yang merusak . Anda dapat melakukannya di beberapa browser dengan sintaks berikut:

[one, two] = arr;

Ini didukung di beberapa browser dan transpiler terbaru seperti Babel dan Traceur . Ini adalah fitur yang diperkenalkan dengan ECMAScript 4 yang kemudian menjadi ECMAScript Harmony, yang akhirnya menjadi ES 2015.


Sepertinya itu bagian dari ES6 (2015), bukan ES4? ecma-international.org/ecma-262/6.0/…
jab

@jab: terima kasih! terkadang jawaban lama ini dilupakan dan menjadi usang, meskipun tampaknya Mathias sudah menambahkan info itu ke jawabannya :)
Andy E


6

Anda bisa menggunakan fungsi apply array jika Anda ingin item array dilewatkan sebagai argumen fungsi.


4
Saya tidak yakin JavaScript Arraymemiliki .apply()fungsi. Saya pikir yang Anda maksud some_function.apply(this, my_array). Lihat jawaban
Kit


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

1
Anda harus benar-benar menggunakan varuntuk mencegah variabel mencemari cakupan global.
Mathias Bynens

Saya hanya mengasumsikan semua variabel yang dideklarasikan :)
rob waminal

Mungkin ide yang lebih baik untuk mendeklarasikan semua vars untuk setiap cakupan sekaligus daripada memiliki dua vardeklarasi terpisah .
Mathias Bynens

2

CoffeeScript memilikinya: http://jashkenas.github.com/coffee-script/#pattern_matching

Dan, dikutip dari atas halaman:

"CoffeeScript adalah bahasa kecil yang dikompilasi ke dalam JavaScript. Anggap saja sebagai saudara lelaki JavaScript yang kurang mencolok - gen yang sama, kira-kira tingginya sama, tetapi gaya yang berbeda. Terlepas dari beberapa hadiah bonus, pernyataan di CoffeeScript sesuai dengan satu -to-one dengan padanannya di JavaScript, itu hanya cara lain untuk mengatakannya. "


1
Ini tidak menjawab pertanyaan itu. Saya menghargai bahwa CoffeeScript memiliki beberapa hal yang rapi, tetapi pertanyaannya adalah tentang Javascript.
Hovis Biddle

Tautan mati: (((
Paul Draper
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.