[javascript] 튜플에서 JavaScript 변수 할당

Python 2 및 Python 3과 같은 다른 언어에서는 값을 정의하고 튜플 변수에 할당하고 다음과 같이 값을 검색 할 수 있습니다.

tuple = ("Bob", 24)
name, age = tuple
print(name)           #name evaluates to Bob
print(age)            #age evaluates to 24

JavaScript에 비슷한 것이 있습니까? 아니면 배열을 사용하여 추악한 방식으로 수행해야합니까?

tuple = ["Bob", 24]
name = tuple[0]       //name Evaluates to Bob
age = tuple[1]        //age Evaluates to 24

JavaScript 5에서 Python 튜플을 시뮬레이션하는 더 좋은 방법이 있습니까?

업데이트 : 새 프로젝트의 경우 CoffeeScript보다 선호되어야하는 ES6에 대한 답변을 참조하십시오.



답변

Javascript 1.7 은 본질적으로 원하는 것을 할 수 있도록 해체 된 할당 을 추가했습니다 .

function getTuple(){
   return ["Bob", 24];
}
var [a, b] = getTuple();
// a === "bob" , b === 24 are both true


답변

추악한 방식으로해야합니다. 당신이 경우 정말 이런 걸 원하는, 당신은 체크 아웃 할 수있다 커피 스크립트 그와 더 파이썬처럼 보이게 다른 기능의 전체 많이 가지고, (미안 그것 같이 정말 광고 같은 소리하고 있지만합니다.)


답변

비슷한 작업을 수행 할 수 있습니다.

var tuple = Object.freeze({ name:'Bob', age:14 })

이름과 나이를 속성으로

tuple.name
tuple.age 


답변

이 “튜플”기능은 EcmaScript2015에서 구조 분해라고하며 곧 최신 브라우저에서 지원 될 예정입니다. 당분간 Firefox와 Chrome 만 지원합니다 .

하지만 트랜스 파일러를 사용할 수 있습니다 .

코드는 파이썬만큼 멋지게 보일 것입니다.

let tuple = ["Bob", 24]
let [name, age] = tuple

console.log(name)
console.log(age)


답변

고정 된 배열은 파이썬 튜플과 동일하게 작동합니다.

const tuple = Object.freeze(["Bob", 24]);
let [name, age]; = tuple
console.debug(name); // "Bob"
console.debug(age); // 24

화려하고 클래스 정의

class Tuple extends Array {
  constructor(...items) {
    super(...items);
    Object.freeze(this);
  }
}

let tuple = new Tuple("Jim", 35);
let [name, age] = tuple;
console.debug(name); // Jim
console.debug(age); // 35
tuple = ["Bob", 24]; // no effect 
console.debug(name); // Jim
console.debug(age); // 25

모든 최신 브라우저에서 오늘 작동합니다.


답변

튜플은 JavaScript에서 지원되지 않습니다.

불변 목록을 찾고 있다면 Object.freeze ()를 사용하여 배열을 불변으로 만들 수 있습니다.

Object.freeze () 메서드는 객체를 고정합니다. 즉, 새 속성이 추가되지 않도록합니다. 기존 속성이 제거되는 것을 방지합니다. 기존 속성 또는 열거 가능성, 구성 가능성 또는 쓰기 가능성이 변경되는 것을 방지합니다. 본질적으로 객체는 사실상 불변으로 만들어집니다. 이 메서드는 고정중인 개체를 반환합니다.

출처 : Mozilla 개발자 네트워크-Object.freeze ()

평소와 같이 배열을 할당하지만 ‘Object.freeze ()를 사용하여 잠급니다.

> tuple = Object.freeze(['Bob', 24]);
[ 'Bob', 24 ]

일반 배열처럼 값을 사용합니다 (python 다중 할당은 지원되지 않음).

> name = tuple[0]
'Bob'
> age = tuple[1]
24

새 값 할당 시도

> tuple[0] = 'Steve'
'Steve'

하지만 값은 변하지 않습니다

> console.log(tuple)
[ 'Bob', 24 ]


답변

불행히도 (ECMA | Java) Script에서는 해당 튜플 할당 구문을 사용할 수 없습니다.

편집 : Mozilla / JS 1.7에 연결된 사람-이것은 브라우저 간 작동하지 않지만 필요하지 않은 경우 답변이 있습니다.