Подтвердить что ты не робот

Массив Javascript со значениями по умолчанию (эквивалент Python defaultdict)?

Возможный дубликат:
Установить свойство undefined javascript перед чтением

Есть ли эквивалент Python defaultdict в Javascript? Это будет массив Javascript, где значение, возвращаемое для отсутствующего ключа, является определяемым. Что-то вроде:

var a = defaultArray("0");
console.log(a['dog']);
// would print 0

Если нет, как вы его реализуете?

4b9b3361

Ответ 1

Нет, это невозможно в JavaScript. Кстати, вы, конечно, имели в виду объекты (свойства-значения-карты) вместо массивов. Два решения:

  • Внесите свой объект в Proxy, который предназначен для того, чтобы делать именно то, что вы хотите. Тем не менее, это только черновик и в настоящее время только поддерживается в Firefox Javascript 1.8.5.

  • Используйте функцию getter с параметром string вместо свойств объекта. Эта функция может искать ключ ввода во внутреннем "словарном" объекте и обрабатывать промахи программно - например, создание значений динамически или возврат значений по умолчанию.

    Конечно, вы можете построить factory для таких функций getter.

function defaultDict(map, default) {
    return function(key) {
        if (key in map)
            return map[key];
        if (typeof default == "function")
            return default(key);
        return default;
    };
}

var a = defaultDict({cat: 1}, 0);
console.log(a('cat')); // 1
console.log(a('dog')); // 0