Как найти значение ключа, если ключ является массивом?

#javascript

#javascript

Вопрос:

Я пытаюсь создать словарь в виде координат, которые возвращают цвета.

Я создал словарь с ключами в виде массива, например [0, 1] . Однако я не могу получить значение, предоставив ключ.

 dict = {
  key:   [0, 1],
  value: "red"
}

dict[[0, 1]]
  

Я ожидал dict[[0, 1]] присвоить значение «red», однако там просто написано «undefined».

Комментарии:

1. dict Является массивом объектов?

2. Что именно вы ожидаете вернуть? Это очень сбивает с толку. И вы путаете значения свойств с ключами свойств

3. Вы уверены, что это JavaScript?

4. Я пытаюсь создать словарь в виде координат, которые возвращают цвета.

5. Нужно быть намного более конкретным, чем то, чего вы пытаетесь достичь

Ответ №1:

Для использования массива в качестве ключа вы могли бы использовать Map с объектной ссылкой на массив в качестве ключа.

Этот подход не работает для похожего, но неравного массива.

 var map = new Map,
    key = [0, 1],
    value = 'red';

map.set(key, value);

console.log(map.get(key));    // red
console.log(map.get([0, 1])); // undefined  

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

 function setValue(hash, [x, y], value) {
    hash[x] = hash[x] || {};
    hash[x][y] = value;
}

function getValue(hash, keys) {
    return keys.reduce((o, key) => (o || {})[key], hash);
}

var hash = {},
    key = [0, 1],
    value = 'red';

setValue(hash, key, value);

console.log(getValue(hash, key));
console.log(hash);  

Или объединенный подход с разделителем значений.

 var hash = {},
    key = [0, 1].join('|'),
    value = 'red';

hash[key] = value;

console.log(hash[key]);
console.log(hash);  

Комментарии:

1. Спасибо, я использовал объединенный подход с разделителем