Giải nén mảng thành các biến riêng biệt trong JavaScript


141

Đây là một vấn đề đơn giản và tôi đã làm nó trước đây. Tôi chỉ không thể nhớ làm thế nào, hoặc chính xác nó được gọi là gì.

Trong python tôi có thể làm điều này:

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

Làm thế nào để tôi làm điều đó trong JavaScript?

Câu trả lời:


173

Đây hiện là giải pháp tương thích với nhiều trình duyệt AFAIK:

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

ES6 sẽ cho phép hủy nhiệm vụ:

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

Hoặc, để bám vào ví dụ ban đầu của bạn:

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

Bạn cũng có thể tạo một giá trị mặc định:

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

5
destructuring phân công đã hỗ trợ đầy đủ như ngày nay kangax.github.io/compat-table/es6/#test-destructuring
grandrew

20

Đó là nhiệm vụ hủy diệt . Bạn có thể làm điều đó trong một số trình duyệt với cú pháp sau:

[one, two] = arr;

Nó được hỗ trợ trong một số trình duyệt và bộ chuyển mã mới nhất như BabelTraceur . Đây là một tính năng được giới thiệu với ECMAScript 4 mà sau này trở thành ECMAScript Harmony, cuối cùng trở thành ES 2015.


Hình như đó là một phần của ES6 (2015), không phải ES4? ecma
jab

@jab: cảm ơn! đôi khi những câu trả lời cũ này bị lãng quên và trở nên lỗi thời, mặc dù có vẻ như Mathias đã thêm thông tin đó vào câu trả lời của mình :)
Andy E


6

Bạn có thể sử dụng hàm áp dụng của mảng nếu bạn muốn một mục mảng được truyền dưới dạng đối số hàm.


4
Tôi không chắc chắn JavaScript Array.apply()chức năng. Tôi nghĩ bạn có ý đó some_function.apply(this, my_array). Xem câu trả lời
Kit


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

1
Bạn thực sự nên sử dụng varđể ngăn chặn các biến gây ô nhiễm phạm vi toàn cầu.
Mathias Bynens

Tôi chỉ giả sử tất cả các biến được khai báo của nó :)
rob waminal

Có lẽ là một ý tưởng tốt hơn để khai báo tất cả vars cho mỗi phạm vi trong một lần thay vì có hai varkhai báo riêng biệt .
Mathias Bynens

2

CoffeeScript có nó: http://jashkenas.github.com/coffee-script/#potype_matching

Và, trích dẫn từ đầu trang:

"CoffeeScript là một ngôn ngữ nhỏ biên dịch thành JavaScript. Hãy nghĩ về nó như một đứa em trai ít phô trương của JavaScript - cùng một gen, có cùng chiều cao, nhưng có một phong cách khác nhau. -to-one với tương đương với JavaScript, đó chỉ là một cách khác để nói về nó. "


1
Điều này không trả lời câu hỏi. Tôi đánh giá cao CoffeeScript có một số thứ gọn gàng, nhưng câu hỏi là về Javascript.
Hovis Biddle

Liên kết chết: ((((
Paul Draper
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.