Есть ли способ создать хэш-карту в javascript и манипулировать ею, например, добавлять и удалять значения?

Мое требование состоит в том, чтобы хранить пары ключ-значение в структуре данных и при необходимости извлекать или удалять пары с помощью ключей в JavaScript.

Как я могу сделать это в JavaScript, как это делается в Java?

Я видел ответ, создающий экземпляр хэш-карты, например:

var hash={};

Теперь Ie может добавлять в него такие значения, как:

hash={ "January":"1","Feb":"2" }

Могу ли я динамически вставлять значения с помощью ключей и извлекать их, а также получать размер хэш-карты?


person user1817439    schedule 16.12.2014    source источник
comment
И как эта Ява?   -  person fge    schedule 16.12.2014
comment
Что вы пробовали? Вы должны иметь возможность использовать объекты Google javascript, карту javascript или ассоциированный массив javascript и просматривать всю необходимую информацию.   -  person mkobit    schedule 16.12.2014


Ответы (5)


Да, это ассоциативный массив (var hash = new Object();)

//You can add in these ways:

hash.January='1';
hash['Feb']='2';

//For length:
console.log(Object.keys(hash).length)

//To fetch by key:
console.log(hash['Feb']) // '2'

//To fetch all:
for(var key in hash){
    console.log('key is :' + key + ' and value is : '+ hash[key])
}
person juvian    schedule 16.12.2014

Вы можете использовать встроенный объект Map.

var myMap = new Map();
var keyObj = {};
myMap.set(keyObj, "value");
myMap.get(keyObj); 

for (var [key, value] of myMap) {
  console.log(key + " = " + value);
}

Дополнительная информация здесь: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Map

person user9269553    schedule 27.04.2018
comment
Ссылка на английском для всех желающих: developer.mozilla.org /en-US/docs/Web/JavaScript/Reference/ - person Flizzet; 11.07.2019

hash["dynamic"] = 5 что-нибудь вставит. Object.keys(hash).length получит размер.

person b4hand    schedule 16.12.2014

См. это руководство по объектам JavaScript: http://www.w3schools.com/js/js_objects.asp

К объектам JavaScript можно получить доступ несколькими способами. Возьмем этот объект в качестве примера:

var person = {
  first_name: "John",
  last_name: "Smith",
  age: 39
};

Если вы хотите получить доступ к first_name, вы можете сделать:

person.first_name;

Or

person['first_name'];

Они оба получат значение.

Вы также можете установить значение аналогичным образом:

person.first_name = "Michael";

Теперь, если вы имели в виду создание итератора с использованием метода keys(), как в Java, то вы не можете сделать это точно, но вы можете сделать что-то подобное.

Однако вы можете перебирать объект аналогично тому, как вы перебираете массив:

for (var property in object) {
  if (object.hasOwnProperty(property)) {
    // do stuff
  }

}

Также доступна более новая встроенная функция, в которой вы можете использовать Object.keys(person) для получения массива ключей объектов. Подробнее здесь:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

Я предлагаю использовать Google немного больше. Есть много ресурсов для такого типа вопросов. Вы найдете ответ быстрее, чем кто-то ответит здесь.

person Michael Garner    schedule 16.12.2014
comment
Больше не нужно использовать object.hasOwnProperty(), если вы создаете карту с помощью Object.create(null). Это создает объект без прототипа, поэтому он не содержит никаких свойств, кроме тех, которые вы в него вложили. Я думаю, что это новое в ECMAScript 5? - person Andy; 27.01.2015

элегантный и простой код хеш-карты JavaScript

var hashMap=function(){
this.hashDict={};//dictionary
this.size=0;
this.debug=true;
return this;
}

теперь вставить:

hashMap.prototype.put=function(_key,_value){
if (!this.hashDict.hasOwnProperty(_key)) {
this.hashDict[_key] = _value;
++this.size;
}
else if(this.debug)
throw 'duplicate keys not allowed. key : '+_key;
}

также можно получить размер с помощью и выполнить все остальные манипуляции

вам нужно только создать объект хеш-карты класса, например:

hashmap n = new hashMap();
n.put('key','value');
n.get('key');
n.size; // gives size 
person jacquel    schedule 17.12.2014