Поддельные словари JavaScript

Я объявил массивы Javascript таким образом, чтобы затем мог получить к ним доступ с помощью ключа, но это было давно, и я забыл, как я это делал.

По сути, у меня есть два поля, которые я хочу сохранить: уникальный ключ и его значение. Я знаю, что это можно сделать ... что-то вроде:

var jsArray = new {key: 'test test', value: 'value value'},
              new {key: 'test 2', value: 'value 2'};

и доступен как:

value = jsArray[key]

Может кто-нибудь мне напомнить?

Все объекты (массивы или другие) в JS могут быть проиндексированы - технически любая операция индексирования, a [b] совпадает с a. <Строковое значение b> - хотя, очевидно, для массивов и т. д. Никакой движок JS на самом деле не делает этого, что путь: D

olliej 14.10.2008 02:47
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
552
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Сделать это можно разными способами:

var a = {'a':0, 'b':1, 'c':2};

var b = new Array();
b['a'] = 0;
b['b'] = 1;
b['c'] = 2;

var c = new Object();
c.a = 0;
c.b = 1;
c.c = 2;

Стоит отметить, что a ['b'] и a.b идентичны, на самом деле a [0] совпадает с a.0, только грамматика JS мешает вам сделать это: D

olliej 14.10.2008 02:48

Да, внутренний доступ осуществляется таким же образом, это ваш выбор, использование ведьмовского аромата: D

Christian C. Salvadó 14.10.2008 03:19

var myFancyDictionary = {
  key: 'value',
  anotherKey: 'anotherValue',
  youGet: 'the idea'
}

Если вы уже используете Prototype, попробуйте использовать его Hash. Если вы используете jQuery, попробуйте использовать Map.

Вот класс JavaScript, который предоставляет простой словарь.

if ( typeof( rp ) == "undefined" ) rp = {};

rp.clientState = new function()
{
    this.items = new Object();
    this.length = 0;

    this.set = function( key, value )
    {
        if ( ! this.keyExists( key ) )
        {
            this.length++;
        }
        this.items[ key ] = value;    
    }

    this.get = function( key )
    {
        if ( this.keyExists( key ) )
        {
            return this.items[ key ];
        } 
    }

    this.keyExists = function( key )
    {
        return typeof( this.items[ key ] ) != "undefined"; 
    }

    this.remove = function( key )
    {
        if ( this.keyExists( key ) )
        {
            delete this.items[ key ];
            this.length--;   
            return true;
        }
        return false;
    }

    this.removeAll = function()
    {
        this.items = null;
        this.items = new Object();
        this.length = 0;
    }
}

Пример использования:

// Add a value pair.
rp.clientState.set( key, value );

// Fetch a value.
var x = rp.clientState.Get( key );

// Check to see if a key exists.
if ( rp.clientState.keyExists( key ) 
{
    // Do something.
}

// Remove a key.
rp.clientState.remove( key );

// Remove all keys.
rp.clientState.removeAll();

Это кажется немного деспотичным. Есть ли конкретная причина, по которой вам нужны эти функции для всего этого?

aaaidan 28.05.2009 17:59

ааайдан - что бы вы пропустили?

rp. 28.05.2009 21:36

@rp я бы удалил все, у вас там не определена операция, которая не определена для встроенных объектов, кроме длины

tobyodavies 04.08.2011 10:06

Другие вопросы по теме