Ключи ассоциативных массивов JavaScript должны быть строками, или они могут быть каким-либо объектом?

Запустите контейнер redis в отдельном режиме:

docker run -d redis

Запустите redis-cli для него:

docker exec -it e0c061a5700bfa400f8f24b redis-cli

где e0c061a5700bfa400f8f24b - идентификатор контейнера.

Согласно документации:

Detached (-d)

Чтобы запустить контейнер в отдельном режиме, вы используете -d = true или просто опция -d. Конструктивно контейнеры запускались в отдельном режиме, когда выход из корневого процесса, использованного для запуска контейнера, завершился, если вы не укажете опцию --rm. Если вы используете -d с --rm, контейнер удаляется при выходе или при выходе демона, в зависимости от того, что произойдет раньше.

blockquote>

.

- интерактивный, -i Держать STDIN открытым, даже если он не подключен

- tty, -t Выделить псевдо-TTY

blockquote>

13
задан ThinkingStiff 18 January 2012 в 23:19
поделиться

3 ответа

Нет никаких собственных ассоциативных массивов в JavaScript, только объекты. Объекты имеют свойства. Названия свойств всегда являются строками: даже числовые индексы массивов будут преобразованы в строки, прежде чем 'волшебство массива' произойдет.

При поиске ассоциативных массивов с произвольными ключами посмотрите здесь.

16
ответ дан 1 December 2019 в 23:16
поделиться

Вы говорите об объектах JavaScript (JSON)?

Спецификация говорит, что ключи должны быть строками http://json.org/.

Но интерпретатор JavaScript позволяет обоим {"key": "val"} и {key: "val"}

1
ответ дан 1 December 2019 в 23:16
поделиться

Я реализовал Javascript HashMap, код которого можно получить из http://github.com/lambder/HashMapJS/tree/master

Ключи и значения могут быть произвольными объекты javascript. Нет никаких требований к объектам, используемым в качестве ключей или значений.

Механизм тривиален. Для каждого ключа создается уникальный идентификатор (для каждого экземпляра HashMap). Этот идентификатор вводится ключевому объекту под именем поля с высокой вероятностью столкновения;)

Этот идентификатор затем используется для ввода базового стандартного объекта ассоциации javascript для запекания.

Вот код:

/*
 =====================================================================
 @license MIT
 @author Lambder
 @copyright 2009 Lambder.
 @end
 =====================================================================
 */
var HashMap = function() {
  this.initialize();
}

HashMap.prototype = {
  hashkey_prefix: "<#HashMapHashkeyPerfix>",
  hashcode_field: "<#HashMapHashkeyPerfix>",

  initialize: function() {
    this.backing_hash = {};
    this.code = 0;
  },
  /*
   maps value to key returning previous assocciation
   */
  put: function(key, value) {
    var prev;
    if (key && value) {
      var hashCode = key[this.hashcode_field];
      if (hashCode) {
        prev = this.backing_hash[hashCode];
      } else {
        this.code += 1;
        hashCode = this.hashkey_prefix + this.code;
        key[this.hashcode_field] = hashCode;
      }
      this.backing_hash[hashCode] = value;
    }
    return prev;
  },
  /*
   returns value associated with given key
   */
  get: function(key) {
    var value;
    if (key) {
      var hashCode = key[this.hashcode_field];
      if (hashCode) {
        value = this.backing_hash[hashCode];
      }
    }
    return value;
  },
  /*
   deletes association by given key.
   Returns true if the assocciation existed, false otherwise
   */
  del: function(key) {
    var success = false;
    if (key) {
      var hashCode = key[this.hashcode_field];
      if (hashCode) {
        var prev = this.backing_hash[hashCode];
        this.backing_hash[hashCode] = undefined;
        if(prev !== undefined)
          success = true;
      }
    }
    return success;
  }
}

//// Usage

// creation

var my_map = new HashMap();

// insertion

var a_key = {};
var a_value = {struct: "structA"};
var b_key = {};
var b_value = {struct: "structB"};
var c_key = {};
var c_value = {struct: "structC"};

my_map.put(a_key, a_value);
my_map.put(b_key, b_value);
var prev_b = my_map.put(b_key, c_value);

// retrieval

if(my_map.get(a_key) !== a_value){
  throw("fail1")
}
if(my_map.get(b_key) !== c_value){
  throw("fail2")
}
if(prev_b !== b_value){
  throw("fail3")
}

// deletion

var a_existed = my_map.del(a_key);
var c_existed = my_map.del(c_key);
var a2_existed = my_map.del(a_key);

if(a_existed !== true){
  throw("fail4")
}
if(c_existed !== false){
  throw("fail5")
}
if(a2_existed !== false){
  throw("fail6")
}

Bon Appétit, Лэмбдер

2
ответ дан 1 December 2019 в 23:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: