파이썬처럼 자바스크립트로 된 사전이 있습니까?
이런 자바스크립트로 사전을 만들어야 합니다.
정확한 표기법은 기억나지 않지만, 다음과 같은 것이었습니다.
states_dictionary={ CT=[alex,harry], AK=[liza,alex], TX=[fred, harry] ........ }
자바스크립트에 그런 것이 있습니까?
이것은 오래된 게시물이지만, 저는 어쨌든 삽화가 들어간 답변을 제공해야 한다고 생각했습니다.
Javascript의 객체 표기법을 사용합니다.이와 같은 경우:
states_dictionary={
"CT":["alex","harry"],
"AK":["liza","alex"],
"TX":["fred", "harry"]
};
값에 액세스하려면 다음을 수행합니다.
states_dictionary.AK[0] //which is liza
또는 javascript 리터럴 객체 표기법을 사용하여 키가 따옴표로 묶일 필요가 없습니다.
states_dictionary={
CT:["alex","harry"],
AK:["liza","alex"],
TX:["fred", "harry"]
};
2015년까지는 Javascript에 실제 연상 배열이 없었습니다(ECMAScript 6 릴리스).그 이후로 지도 개체를 로보캣 상태로 사용할 수 있습니다.MDN에서 세부 정보를 찾습니다. 예:
let map = new Map();
map.set('key', {'value1', 'value2'});
let values = map.get('key');
ES6를 지원하지 않으면 다음과 같은 개체를 사용해 볼 수 있습니다.
var x = new Object();
x["Key"] = "Value";
그러나 개체에서는 일반적인 배열 속성이나 array.length와 같은 메서드를 사용할 수 없습니다.적어도 for-in-loop에서 "객체 배열"에 액세스할 수 있습니다.
ECMA스크립트 6에서는 사전 구현인 공식 객체가 도입되었습니다.
let dict = new Map();
dict.set("foo", "bar");
//returns "bar"
dict.get("foo");
자바스크립트의 일반적인 객체와는 달리, ID 비교를 사용하여 임의의 객체를 키로 허용합니다.
let foo = {};
let bar = {};
let dict = new Map();
dict.set(foo, "Foo");
dict.set(bar, "Bar");
//returns "Bar"
dict.get(bar);
//returns "Foo"
dict.get(foo);
//returns undefined, as {} !== foo and {} !== bar
dict.get({});
사용자 정의 키 비교기를 사용할 방법이 없으므로 ID 비교를 원하지 않는 경우에도 일반 개체처럼 숫자 또는 문자열 키만 사용해야 합니다.
여기에서 JS로 간단한 사전을 만들었습니다.
function JSdict() {
this.Keys = [];
this.Values = [];
}
// Check if dictionary extensions aren't implemented yet.
// Returns value of a key
if (!JSdict.prototype.getVal) {
JSdict.prototype.getVal = function (key) {
if (key == null) {
return "Key cannot be null";
}
for (var i = 0; i < this.Keys.length; i++) {
if (this.Keys[i] == key) {
return this.Values[i];
}
}
return "Key not found!";
}
}
// Check if dictionary extensions aren't implemented yet.
// Updates value of a key
if (!JSdict.prototype.update) {
JSdict.prototype.update = function (key, val) {
if (key == null || val == null) {
return "Key or Value cannot be null";
}
// Verify dict integrity before each operation
if (keysLength != valsLength) {
return "Dictionary inconsistent. Keys length don't match values!";
}
var keysLength = this.Keys.length;
var valsLength = this.Values.length;
var flag = false;
for (var i = 0; i < keysLength; i++) {
if (this.Keys[i] == key) {
this.Values[i] = val;
flag = true;
break;
}
}
if (!flag) {
return "Key does not exist";
}
}
}
// Check if dictionary extensions aren't implemented yet.
// Adds a unique key value pair
if (!JSdict.prototype.add) {
JSdict.prototype.add = function (key, val) {
// Allow only strings or numbers as keys
if (typeof (key) == "number" || typeof (key) == "string") {
if (key == null || val == null) {
return "Key or Value cannot be null";
}
if (keysLength != valsLength) {
return "Dictionary inconsistent. Keys length don't match values!";
}
var keysLength = this.Keys.length;
var valsLength = this.Values.length;
for (var i = 0; i < keysLength; i++) {
if (this.Keys[i] == key) {
return "Duplicate keys not allowed!";
}
}
this.Keys.push(key);
this.Values.push(val);
}
else {
return "Only number or string can be key!";
}
}
}
// Check if dictionary extensions aren't implemented yet.
// Removes a key value pair
if (!JSdict.prototype.remove) {
JSdict.prototype.remove = function (key) {
if (key == null) {
return "Key cannot be null";
}
if (keysLength != valsLength) {
return "Dictionary inconsistent. Keys length don't match values!";
}
var keysLength = this.Keys.length;
var valsLength = this.Values.length;
var flag = false;
for (var i = 0; i < keysLength; i++) {
if (this.Keys[i] == key) {
this.Keys.shift(key);
this.Values.shift(this.Values[i]);
flag = true;
break;
}
}
if (!flag) {
return "Key does not exist";
}
}
}
이제 위의 구현을 사용하여 사전을 시뮬레이션할 수 있습니다.
var dict = new JSdict();
dict.add(1, "one")
dict.add(1, "one more")
"Duplicate keys not allowed!"
dict.getVal(1)
"one"
dict.update(1, "onne")
dict.getVal(1)
"onne"
dict.remove(1)
dict.getVal(1)
"Key not found!"
이것은 단지 기본적인 시뮬레이션입니다.적어도 O(nlogn) 시간 복잡도 이하에서 작동하도록 더 나은 실행 시간 알고리즘을 구현하여 더욱 최적화할 수 있습니다.배열에서 병합/빠른 정렬을 한 다음 검색을 B로 검색하는 것과 같습니다.저는 JS에서 해시함수를 매핑하는 것에 대해 시도하거나 검색하지 않았습니다.
또한 JSdict obj의 Key 및 Value를 개인 변수로 변환하여 몰래 사용할 수 있습니다.
이것이 도움이 되길 바랍니다!
EDIT >> 위를 구현한 후, 저는 개인적으로 JS 객체를 즉시 사용할 수 있는 연관 배열로 사용했습니다.
그러나 편리한 해시 테이블 경험을 만드는 데 실제로 도움이 되는 두 가지 방법에 대해 특별히 언급하고 싶습니다.
Viz: dict.hasOwnProperty(키) 및 delete dict[키]
이 게시물을 이 구현/사용에 대한 좋은 리소스로 읽으십시오.JavaScript 연관 배열에서 동적으로 키 만들기
감사합니다!
JavaScript 개체를 사용합니다.사전의 키처럼 속성에 액세스할 수 있습니다.이것이 JSON의 기반입니다.구문은 Python 사전과 유사합니다.참조: JSON.org
오래된 질문이지만 최근에 AS3>JS 포트를 해야 했고, 속도를 위해 JS를 위한 간단한 AS3 스타일 사전 객체를 작성했습니다.
http://jsfiddle.net/MickMalone1983/VEpFf/2/
몰랐다면 AS3 사전을 통해 문자열이 아닌 모든 개체를 키로 사용할 수 있습니다.사용법을 찾으면 매우 유용합니다.
그것은 본래의 물체만큼 빠르지는 않지만, 저는 그런 점에서 어떤 중요한 문제도 발견하지 못했습니다.
API:
//Constructor
var dict = new Dict(overwrite:Boolean);
//If overwrite, allows over-writing of duplicate keys,
//otherwise, will not add duplicate keys to dictionary.
dict.put(key, value);//Add a pair
dict.get(key);//Get value from key
dict.remove(key);//Remove pair by key
dict.clearAll(value);//Remove all pairs with this value
dict.iterate(function(key, value){//Send all pairs as arguments to this function:
console.log(key+' is key for '+value);
});
dict.get(key);//Get value from key
Firefox 13+는 다음의 실험적인 구현을 제공합니다.map
와 유사한 객체dict
파이썬의 개체입니다.사양은 여기에 있습니다.
파이어폭스에서만 사용할 수 있지만 의 속성을 사용하는 것보다 더 좋아 보입니다.new Object()
문서의 인용문:
- 오브젝트에는 프로토타입이 있으므로 맵에 기본 키가 있습니다.그러나 이는 다음을 사용하여 우회할 수 있습니다.
map = Object.create(null)
.- 의 열쇠들.
Object
이다Strings
그들이 어떤 가치가 될 수 있는 곳.Map
.- 당신은 a의 사이즈를 얻을 수 있습니다.
Map
수동으로 크기를 추적해야 하는 동안 쉽게Object
.
언급URL : https://stackoverflow.com/questions/3559070/are-there-dictionaries-in-javascript-like-python
'programing' 카테고리의 다른 글
TypeScript에서 각 루프를 끊는 방법 (0) | 2023.08.21 |
---|---|
요소 너비를 만드는 방법: 100% - 패딩? (0) | 2023.08.21 |
AV Player 대리자가 없습니까?노래가 재생되면 추적하는 방법은 무엇입니까?목표 아이폰 개발 (0) | 2023.08.01 |
@Transactional은 어디에 두나요?인터페이스 사양 또는 구현 시? (0) | 2023.08.01 |
봄의 카프카 소비자 청취자 한 명이 여러 주제를 들을 수 있습니까? (0) | 2023.08.01 |