JavaScript에서 배열을 별도의 변수로 압축 풀기


141

이것은 간단한 문제이며 이전에 해본 적이 있습니다. 나는 그것이 어떻게, 또는 정확히 무엇이 불렀는지 기억할 수 없습니다.

파이썬에서 나는 이것을 할 수 있습니다 :

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

JavaScript로 어떻게합니까?

답변:


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
할당을 destructuring하는 것은 오늘날의 등을 완벽하게 지원이 kangax.github.io/compat-table/es6/#test-destructuring
grandrew

20

그것은 할당을 파괴하고 있습니다. 다음과 같은 구문으로 일부 브라우저에서 수행 할 수 있습니다.

[one, two] = arr;

BabelTraceur 와 같은 일부 최신 브라우저 및 트랜스 필러에서 지원됩니다 . 이것은 ECMAScript 4에서 도입 된 기능으로 나중에 ECMAScript Harmony가되었으며 결국 ES 2015가되었습니다.


ES4가 아닌 ES6 (2015)의 일부인 것 같습니까? ecma-international.org/ecma-262/6.0/…
jab

@ 잡 : 고마워! Mathias가 이미 해당 정보를 해당 답변에 추가 한 것처럼 보이지만이 오래된 답변은 잊혀지고 구식이됩니다.
Andy E


6

배열 항목을 함수 인수로 전달하려면 배열의 적용 함수를 사용할 수 있습니다.


4
JavaScript Array.apply()함수 가 있는지 확실하지 않습니다 . 나는 당신이 의미하는 것 같아요 some_function.apply(this, my_array). 이 답변
Kit


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

1
var변수가 전역 범위를 오염시키는 것을 방지하기 위해 실제로 사용해야 합니다.
Mathias Bynens

난 그냥 그 선언 된 모든 변수 :) 있으리라 믿고있어
롭 waminal을

var두 개의 별도 var선언이 아닌 한 번에 각 범위의 모든을 선언하는 것이 좋습니다 .
Mathias Bynens

2

CoffeeScript에는 다음이 있습니다. http://jashkenas.github.com/coffee-script/#pattern_matching

그리고 페이지 상단에서 인용했습니다.

"CoffeeScript는 JavaScript로 컴파일되는 작은 언어입니다. JavaScript는 덜 유쾌한 동생이라고 생각하십시오. 같은 유전자, 대략 같은 높이이지만 다른 스타일 감각입니다. 소수의 보너스 혜택 외에도 CoffeeScript의 문장은 하나에 해당합니다. "자바 스크립트에서 동등한 기능을 갖춘 것으로, 또 다른 방법입니다."


1
이것은 질문에 대답하지 않습니다. CoffeeScript에는 좋은 점이 있지만 Javascript에 관한 질문입니다.
Hovis Biddle

죽은 링크 : ((((
Paul Draper
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.