Array.prototype.with()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since иÑÐ»Ñ 2023 г..
ÐеÑод with() ÑкземплÑÑов Array возвÑаÑÐ°ÐµÑ Ð½Ð¾Ð²Ñй маÑÑив, в коÑоÑом ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¿Ð¾ ÑÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñ Ð¸Ð½Ð´ÐµÐºÑÑ Ð·Ð°Ð¼ÐµÐ½Ñн ÑказаннÑм знаÑением. ЯвлÑеÑÑÑ ÐºÐ¾Ð¿Ð¸ÑÑÑÑей веÑÑией Ð·Ð°Ð¼ÐµÐ½Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑлеменÑа Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑкобоÑной запиÑи.
СинÑакÑиÑ
arrayInstance.with(index, value)
ÐаÑамеÑÑÑ
index-
ÐÑÑÑиÑÑваемÑй Ð¾Ñ Ð½ÑÐ»Ñ Ð¸Ð½Ð´ÐµÐºÑ ÑлеменÑа, знаÑение коÑоÑого надо измениÑÑ, пÑеобÑазованнÑй в Ñелое ÑиÑло.
- ÐÑÑиÑаÑелÑнÑй Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð¾Ð±ÑаÑаÑÑÑÑ Ðº ÑлеменÑам Ñ ÐºÐ¾Ð½Ñа маÑÑива: еÑли
-array.length <= index < 0, Ñо иÑполÑзÑеÑÑÑindex + array.length. - ÐÑли Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾Ñле ноÑмализаÑии вÑÑ
Ð¾Ð´Ð¸Ñ Ð·Ð° пÑÐµÐ´ÐµÐ»Ñ Ð´Ð¾Ð¿ÑÑÑимÑÑ
знаÑений, Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка
RangeError.
- ÐÑÑиÑаÑелÑнÑй Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð¾Ð±ÑаÑаÑÑÑÑ Ðº ÑлеменÑам Ñ ÐºÐ¾Ð½Ñа маÑÑива: еÑли
value-
Ðовое знаÑение изменÑемого ÑлеменÑа.
ÐозвÑаÑаемое знаÑение
ÐовÑй маÑÑив, в коÑоÑом знаÑение ÑлеменÑа Ñ Ð¸Ð½Ð´ÐµÐºÑом index изменено на новое знаÑение value.
ÐÑклÑÑиÑелÑнÑе ÑиÑÑаÑии
RangeError-
ÐозникаеÑ, еÑли
index >= array.lengthилиindex < -array.length.
ÐпиÑание
ÐеÑод with() изменÑÐµÑ Ð·Ð½Ð°Ñение ÑлеменÑа маÑÑива Ñ ÑказаннÑм индекÑом, возвÑаÑÐ°Ñ Ð½Ð¾Ð²Ñй маÑÑив Ñ Ð¸Ð·Ð¼ÐµÐ½ÑннÑм знаÑением ÑÑого ÑлеменÑа. ÐÑÑ
однÑй маÑÑив не изменÑеÑÑÑ. ÐозволÑÐµÑ ÑоздаваÑÑ ÑепоÑÐºÑ Ð²Ñзовов Ð´Ð»Ñ Ð¾Ð±ÑабоÑки маÑÑивов.
СоÑеÑÐ°Ñ with() Ñ at(), можно иÑполÑзоваÑÑ Ð¾ÑÑиÑаÑелÑнÑе индекÑÑ Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð¸ запиÑи маÑÑивов.
ÐеÑод with() никогда не возвÑаÑÐ°ÐµÑ ÑазÑежÑннÑй маÑÑив. ÐÑли иÑÑ
однÑй маÑÑив ÑазÑежÑннÑй, Ñо в новом маÑÑиве пÑÑÑÑе ÑлоÑÑ Ð±ÑдÑÑ Ð·Ð°Ð¼ÐµÐ½ÐµÐ½Ñ Ð½Ð° undefined.
ÐеÑод with() ÑвлÑеÑÑÑ ÑнивеÑÑалÑнÑм. ÐÐ»Ñ ÐµÐ³Ð¾ ÑабоÑÑ Ð½ÐµÐ¾Ð±Ñ
одимо ÑолÑко, ÑÑÐ¾Ð±Ñ Ð·Ð½Ð°Ñение this имело ÑвойÑÑво length и ÑвойÑÑва Ñ ÑелоÑиÑленнÑми индекÑами.
ÐÑимеÑÑ
>Создание нового маÑÑива Ñ Ð¾Ð´Ð½Ð¸Ð¼ изменÑннÑм ÑлеменÑом
const arr = [1, 2, 3, 4, 5];
console.log(arr.with(2, 6)); // [1, 2, 6, 4, 5]
console.log(arr); // [1, 2, 3, 4, 5]
Создание ÑепоÑки вÑзовов
С помоÑÑÑ Ð¼ÐµÑода with() можно обновиÑÑ Ð¾Ð´Ð¸Ð½ ÑлеменÑ, а заÑем пÑимениÑÑ Ð´ÑÑгие меÑÐ¾Ð´Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑивÑегоÑÑ Ð¼Ð°ÑÑива.
const arr = [1, 2, 3, 4, 5];
console.log(arr.with(2, 6).map((x) => x ** 2)); // [1, 4, 36, 16, 25]
ÐÑполÑзование with() Ñ ÑазÑежÑннÑми маÑÑивами
ÐеÑод with() вÑегда ÑоздаÑÑ Ð¿Ð»Ð¾ÑнÑй маÑÑив.
const arr = [1, , 3, 4, , 6];
console.log(arr.with(0, 2)); // [2, undefined, 3, 4, undefined, 6]
ÐÑзов with() Ð´Ð»Ñ Ð¾Ð±ÑекÑов, не ÑвлÑÑÑÐ¸Ñ ÑÑ Ð¼Ð°ÑÑивами
ÐеÑод with() ÑоздаÑÑ Ð¸ возвÑаÑÐ°ÐµÑ Ð½Ð¾Ð²Ñй маÑÑив. Ðн ÑиÑÐ°ÐµÑ ÑвойÑÑво length и обÑаÑаеÑÑÑ Ðº ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ ÑвойÑÑвÑ, клÑÑ ÐºÐ¾ÑоÑого ÑвлÑеÑÑÑ Ð½ÐµÐ¾ÑÑиÑаÑелÑнÑм ÑиÑлом менÑÑим length. ÐÑи обÑаÑении к ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ ÑвойÑÑÐ²Ñ this ÑлеменÑÑ Ð¼Ð°ÑÑива Ñ Ð¸Ð½Ð´ÐµÐºÑом, ÑавнÑм клÑÑÑ ÑÑого ÑвойÑÑва, пÑиÑваиваеÑÑÑ Ð·Ð½Ð°Ñение ÑÑого ÑвойÑÑва. РиÑоге ÑлеменÑÑ Ð¼Ð°ÑÑива Ñ Ð¸Ð½Ð´ÐµÐºÑом index пÑиÑваиваеÑÑÑ value.
const arrayLike = {
length: 3,
unrelated: "foo",
0: 5,
2: 4,
3: 3, // игноÑиÑÑеÑÑÑ, Ñак как длина Ñавна 3
};
console.log(Array.prototype.with.call(arrayLike, 0, 1));
// [ 1, undefined, 4 ]
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification > # sec-array.prototype.with > |