Map.prototype.getOrInsertComputed()
Базовая поддержка Недавно доступно
Эта функция работает на самых новых устройствах и версиях браузеров. Эта функция может не работать на старых устройствах или версиях браузеров. Она доступна во всех браузерах с февраля 2026 года.
Метод getOrInsertComputed() экземпляров Map возвращает значение, соответствующее указанному ключу в этом Map. Если ключ отсутствует, он вставляет новую запись с ключом и значением по умолчанию, вычисленным с помощью предоставленной функции обратного вызова, и возвращает вставленное значение.
Используйте этот метод вместо Map.prototype.getOrInsert(), когда вычисление значения по умолчанию требует больших затрат, и вы хотите избежать его вычисления, если оно фактически не требуется.
Попробовать
const map = new Map([["bar", "foo"]]);
const defaultCreator = (key) => `default for ${key}`;
console.log(map.getOrInsertComputed("bar", defaultCreator));
// Expected output: "foo"
console.log(map.getOrInsertComputed("baz", defaultCreator));
// Expected output: "default for baz"
Синтаксис
getOrInsertComputed(key, callback)
Параметры
-
key - Ключ элемента для возврата из объекта
Map. Ключи объектов сравниваются по ссылке, а не по значению. -
callback - Функция, которая возвращает значение для вставки и возврата, если ключ еще не присутствует в объекте
Map. Функция вызывается со следующим аргументом:-
key - Тот же ключ, который был передан в
getOrInsertComputed().
-
Возвращаемое значение
Значение, связанное с указанным ключом в объекте Map. Если ключ не найден, результат callback(key) вставляется и возвращается.
Исключения
-
TypeError - Генерируется, если
callbackне является вызываемой функцией.
Примеры
Избегание ненужного вычисления значения по умолчанию
При использовании Map.prototype.getOrInsert() значение по умолчанию вычисляется каждый раз, даже если оно не требуется. С getOrInsertComputed() значение по умолчанию вычисляется только при необходимости.
const map = new Map([["bar", "foo"]]);
const defaultCreator = (key) => {
console.log(`Creating default for ${key}`);
return `default for ${key}`;
};
map.getOrInsert("bar", defaultCreator("bar")); // Logs "Creating default for bar"
map.getOrInsertComputed("bar", defaultCreator); // No log
Спецификации
Совместимость с браузерами
| Настольные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
getOrInsertComputed |
145 |
145 |
144 |
129 |
26.2 |
145 |
144 |
96 |
26.2 |
Нет |
145 |
26.2 |
1.2.20 |
2.6.7 |
26.0.0 |
Смотрите также
- Полифилл
Map.prototype.getOrInsertComputedвcore-js - Полифилл es-shims для
Map.prototype.getOrInsertComputed MapMap.prototype.get()Map.prototype.set()Map.prototype.has()Map.prototype.getOrInsert()
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/getOrInsertComputed