JS. Использование массива как ключа в объекте
Недавно столкнулся с такой проблемой. Для определённого набора идентификаторов я генерирую данные и хочу сохранить их в кэше. То есть грубо говоря хочу создать объект, в котором в качестве ключа мне нужен массив индентификаторов, а в качестве значения будут мои данные. Однако, как известно, стандартные объекты JS не позволяют иметь в качестве ключа ничего кроме string. Поэтому имеется задача по созданию уникального ключа из идентификаторов массива. Причём надо учитывать, что идентификаторы в массиве могут располагаться в различной последовательности, поэтому обычный .join(',') не поможет в такой ситуации. Распишу нагляднее, что мне надо
const cache = {};
const ids1 = ['1', '2', '3'];
const data1 = generateData(ids1);
const key1 = createKey(ids1) // ???????????????
cache[key1] = data1;
const ids2 = ['1', '3', '2']; // те же самые id, что и в ids1, но в другой последовательности
const key2 = createKey(ids2);
const data2 = cache[key2] || generateData(ids2); // data2 должна браться из кэша, поскольку генерировалась для одних и тех же ID, что и в первом случае
Задача сводится к написанию функцию createKey(ids). Помогите
Ответы (1 шт):
Для сохранение объектов как ключей, вы можете использовать Map или WeakMap.
К сожалению, вашу проблему это на 100% не решит)
const cache = new WeakMap();
const ids1 = ['1', '2', '3'];
const data1 = {
x: 1
};
cache.set(ids1, data1);
const ids2 = ['1', '3', '2']; // те же самые id, что и в ids1, но в другой последовательности
const data2 = {
x: 2
};
cache.set(ids2, data2);
console.log(cache.get(ids1))
console.log(cache.get(ids2))