Использование массива в качестве ключа для словаря в JavaScript - PullRequest
0 голосов
/ 07 июня 2011

Как лучше всего в Javascript использовать массив в качестве ключа, с которым я могу сопоставить, чтобы получить значение?

Что я хочу сделать, это получить значение, которое может отображаться на несколько ключей.

При использовании переключателя это будет выглядеть так:

switch(item)
{
    case "table": // fall through
    case "desk": // fall through
    case "chair": // fall through
        result = "office"
        break
}

в моей голове синтаксис будет:

if (dict[0].key.contains(item)) return dict[0].value

Я не хочу использовать переключатель, так как ключи и значения должны быть динамически распределены.

В данный момент я настраиваю объект, который имеет два разных массива, которые должны быть синхронизированы, чтобы возвращать правильные значения, что кажется не идеальным.

var grammar =
[
{
    "app": "sms",
    "items":
    [
        [ "message","sms", "send"],
        [ "view", "read"]
    ],
    "terms":
    [
        [ "who+contact", "message+text" ],
        [ "who+contact"]
    ]
},
{
...
}
];

здесь, если я получаю совпадение с "message", "sms" или "send", я возвращаю "who + contact, message + text", если я получаю совпадение с "view" или "read" I return "who + контакт "

Спасибо за любые идеи.

Ответы [ 2 ]

1 голос
/ 08 июня 2011
var terms = [
    0           : [ "who+contact" , "message+text"],
    "whatever"  : [ "who+contact" ]
];

var items = [
    "message" : 0,
    "sms"     : 0,
    "send"    : 0,
    "view"    : "whatever",
    "read"    : "whatever"
];


function getTerm(match) {
    if (item[match]!==null) {
      return terms[ items[match] ];
    }
    return null;
}
1 голос
/ 08 июня 2011

Почему вы не можете просто использовать обычный объект?

var store = {
    "table":"office",
    "desk":"office",
    "chair":"office"
};

console.log(store["desk"]);

Если проблема заключается в дублировании, вы можете сделать значение ссылочным типом.

var office = {value:"office"};
var store = {
    "table":office,
    "desk":office,
    "chair":office
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...