튜플에서 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 튜플을 시뮬레이션하는 더 좋은 방법이 있습니까?
추악한 방식으로해야합니다. 당신이 경우 정말 이런 걸 원하는, 당신은 체크 아웃 할 수있다 커피 펼쳐 그와 더 기능처럼 보이게 다른 기능의 전체 가지고, (미안 그것 같이 정말 광고 같은 소리하고 있습니다.)
자바 스크립트 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
모든 최신 브라우저에서 오늘 작동합니다.
불행히도 (ECMA | Java) Script에서는 해당 튜플 할당 구문을 사용할 수 없습니다.
편집 : Mozilla / JS 1.7에 어떤 사람-이것은 브라우저 간 작동하지 않지만 필요하지 않은 경우 답변이 있습니다.
튜플은 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 ]
이것은 실제 생활에서 실제로 사용하기위한 것이 아니라 단지 흥미로운 연습 일뿐입니다. JavaScript 평가 기능을 사용하는 것이 왜 나쁜 생각입니까?를 참조하십시오 . 자세한 내용은.
이는 공급 업체별 확장에 의존하지 않고도 얻을 수있는 가장 가까운 것입니다.
myArray = [1,2,3];
eval(set('a,b,c = myArray'));
도우미 기능 :
function set(code) {
var vars=code.split('=')[0].trim().split(',');
var array=code.split('=')[1].trim();
return 'var '+vars.map(function(x,i){return x+'='+array+'['+i+']'}).join(',');
}
임의의 범위에서 작동한다는 증거 :
(function(){
myArray = [4,5,6];
eval(set('x,y,z = myArray'));
console.log(y); // prints 5
})()
eval
Safari에서는 지원되지 않습니다.
장관의 답변에 대한 업데이트로 이제 es2015를 사용하여 다음을 수행 할 수 있습니다.
function Tuple(...args) {
args.forEach((val, idx) =>
Object.defineProperty(this, "item"+idx, { get: () => val })
)
}
var t = new Tuple("a", 123)
console.log(t.item0) // "a"
t.item0 = "b"
console.log(t.item0) // "a"
https://jsbin.com/fubaluwimo/edit?js,console
Javascript에서도 튜플 유형을 가질 수 있습니다. 고차 함수로 정의하기 만하면됩니다 (학기는 교회 인코딩 임).
const Tuple = (...args) => {
const Tuple = f => f(...args);
return Object.freeze(Object.assign(Tuple, args));
};
const get1 = tx => tx((x, y) => x);
const get2 = tx => tx((x, y) => y);
const bimap = f => g => tx => tx((x, y) => Tuple(f(x), g(y)));
const toArray = tx => tx((...args) => args);
// aux functions
const inc = x => x + 1;
const toUpperCase = x => x.toUpperCase();
// mock data
const pair = Tuple(1, "a");
// application
console.assert(get1(pair) === 1);
console.assert(get2(pair) === "a");
const {0:x, 1:y} = pair;
console.log(x, y); // 1 a
console.log(toArray(bimap(inc) (toUpperCase) (pair))); // [2, "A"]
const map = new Map([Tuple(1, "a"), Tuple(2, "b")]);
console.log(map.get(1), map.get(2)); // a b
그주의 Tuple
일반 생성자로 사용되지 않습니다. 이 솔루션은 프로토 타입 시스템에 전혀 의존하지 않고 고차 함수에만 의존합니다.
튜플 Array
처럼 사용되는 s 보다 튜플의 장점은 무엇입니까 ? 교회 인코딩 튜플은 설계 상 변경이 불가능하므로 돌연변이로 인한 부작용을 방지합니다. 이는보다 강력한 애플리케이션을 구축하는 데 도움이됩니다. 또한 Array
컬렉션 유형으로서의 s (예 [a]
:)와 다양한 유형의 관련 데이터로서의 튜플 (예 :) 을 구분하는 코드를 추론하는 것이 더 쉽습니다 (a, b)
.
다음은 간단한 Javascript Tuple 구현입니다.
var Tuple = (function () {
function Tuple(Item1, Item2) {
var item1 = Item1;
var item2 = Item2;
Object.defineProperty(this, "Item1", {
get: function() { return item1 }
});
Object.defineProperty(this, "Item2", {
get: function() { return item2 }
});
}
return Tuple;
})();
var tuple = new Tuple("Bob", 25); // Instantiation of a new Tuple
var name = tuple.Item1; // Assignment. name will be "Bob"
tuple.Item1 = "Kirk"; // Will not set it. It's immutable.
이것은 2- 튜플이지만 3,4,5,6 등의 튜플을 지원하도록 내 예제를 수정할 수 있습니다.
[a, b, c] = [2, 'momo', 7] // b === 'momo', c ===7 ...
참고 URL : https://stackoverflow.com/questions/4512405/javascript-variable-assignments-from-tuples
'IT' 카테고리의 다른 글
배열에서 가장 높은 키 / 보안 검색 (0) | 2020.09.15 |
---|---|
Haskell 이후에 배울 언어는 무엇입니까? (0) | 2020.09.15 |
UITableViewCell이하고있는 것처럼 보이게 무엇을해야합니까? (0) | 2020.09.15 |
scipy.misc 모듈에 imread 속성이 없습니까? (0) | 2020.09.15 |
2 차원 배열을 어떻게 확장합니까? (0) | 2020.09.15 |