[javascript] JavaScript에서 연관 배열 / 해싱을 수행하는 방법

C #에서와 같이 JavaScript를 사용하여 일부 통계를 저장해야합니다.

Dictionary<string, int> statistics;

statistics["Foo"] = 10;
statistics["Goo"] = statistics["Goo"] + 1;
statistics.Add("Zoo", 1);

이 생길인가 Hashtable또는 뭔가처럼 Dictionary<TKey, TValue>자바 스크립트?
어떻게 그런 식으로 값을 저장할 수 있습니까?



답변

JavaScript 객체를 연관 배열로 사용하십시오 .

연관 배열 : 간단히 말해서 연관 배열은 정수 대신 정수를 인덱스로 사용합니다.

로 객체 만들기

var dictionary = {};

Javascript를 사용하면 다음 구문을 사용하여 객체에 속성을 추가 할 수 있습니다.

Object.yourProperty = value;

동일한 대체 구문은 다음과 같습니다.

Object["yourProperty"] = value;

다음 구문을 사용하여 키-값 객체 맵을 만들 수도있는 경우

var point = { x:3, y:2 };

point["x"] // returns 3
point.y // returns 2

다음과 같이 for..in 루프 구문을 사용하여 연관 배열을 반복 할 수 있습니다.

for(var key in Object.keys(dict)){
  var value = dict[key];
  /* use key/value for intended purpose */
}


답변

var associativeArray = {};
associativeArray["one"] = "First";
associativeArray["two"] = "Second";
associativeArray["three"] = "Third";

객체 지향 언어에서 오는 경우이 기사를 확인해야합니다 .


답변

모든 최신 브라우저는 자바 스크립트 객체를 지원 합니다. Object를 사용하는 것보다 Map을 더 잘 사용하는 데에는 몇 가지 이유가 있습니다.

  • 객체에는 프로토 타입이 있으므로 맵에 기본 키가 있습니다.
  • 객체의 키는 문자열이며지도의 값이 될 수 있습니다.
  • 객체의 크기를 추적해야하는 동안 맵의 크기를 쉽게 얻을 수 있습니다.

예:

var myMap = new Map();

var keyObj = {},
    keyFunc = function () {},
    keyString = "a string";

myMap.set(keyString, "value associated with 'a string'");
myMap.set(keyObj, "value associated with keyObj");
myMap.set(keyFunc, "value associated with keyFunc");

myMap.size; // 3

myMap.get(keyString);    // "value associated with 'a string'"
myMap.get(keyObj);       // "value associated with keyObj"
myMap.get(keyFunc);      // "value associated with keyFunc"

다른 객체에서 참조되지 않은 키를 가비지 수집하려면 맵 대신 WeakMap을 사용하십시오 .


답변

특별한 이유가없는 한, 일반 객체 만 사용하십시오. Javascript의 객체 속성은 해시 테이블 스타일 구문을 사용하여 참조 할 수 있습니다.

var hashtable = {};
hashtable.foo = "bar";
hashtable['bar'] = "foo";

그러면 요소 foobar요소를 모두 다음과 같이 참조 할 수 있습니다.

hashtable['foo'];
hashtable['bar'];
// or
hashtable.foo;
hashtable.bar;

물론 이것은 키가 문자열이어야 함을 의미합니다. 문자열이 아닌 경우 내부적으로 문자열로 변환되므로 여전히 작동합니다 (YMMV).


답변

JS의 모든 객체는 해시 테이블처럼 동작하며 일반적으로 해시 테이블로 구현되기 때문에 그와 함께합니다.

var hashSweetHashTable = {};


답변

C #에서 코드는 다음과 같습니다.

Dictionary<string,int> dictionary = new Dictionary<string,int>();
dictionary.add("sample1", 1);
dictionary.add("sample2", 2);

또는

var dictionary = new Dictionary<string, int> {
    {"sample1", 1},
    {"sample2", 2}
};

JavaScript로

var dictionary = {
    "sample1": 1,
    "sample2": 2
}

C #을 사전 개체는 같은 유용한 방법이 포함되어 dictionary.ContainsKey()
자바 스크립트에서 우리가 사용할 수 hasOwnProperty처럼를

if (dictionary.hasOwnProperty("sample1"))
    console.log("sample1 key found and its value is"+ dictionary["sample1"]);


답변

키가 문자열이 아닌 객체가되어야하는 경우 내 jshashtable을 사용할 수 있습니다 .