Array.prototype.with()

基线 2023

新可用

2023 年 7 月起,此功能适用于最新的设备和浏览器版本。此功能可能不适用于旧设备或浏览器。

with()方法Array实例是复制使用方括号表示法更改给定索引的值的版本。它返回一个新数组,其中给定索引处的元素被替换为给定值。

语法

js
arrayInstance.with(index, value)

参数

索引

要更改数组的基于零的索引,转换为整数

  • 负索引从数组末尾算起 - 如果-array.length <= index < 0,则使用index + array.length
  • 如果规范化后的索引超出范围,则会抛出RangeError
价值

要分配给给定索引的任何值。

返回值

一个新的数组,其中index处的元素被替换为value

例外

RangeError

如果index >= array.lengthindex < -array.length,则抛出。

描述

with()方法更改数组中给定索引的值,返回一个新数组,其中给定索引处的元素被替换为给定值。原始数组不会被修改。这使您可以在进行操作时链接数组方法。

通过将with()at()结合使用,您可以分别使用负索引写入和读取数组。

with()方法永远不会生成稀疏数组。如果源数组是稀疏的,则新数组中的空槽将被替换为undefined

with()方法是泛型的。它只期望this值具有length属性和整数键属性。

示例

创建一个包含单个元素更改的新数组

js
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()方法,您可以更新数组中的单个元素,然后应用其他数组方法。

js
const arr = [1, 2, 3, 4, 5];
console.log(arr.with(2, 6).map((x) => x ** 2)); // [1, 4, 36, 16, 25]

对稀疏数组使用 with()

with()方法始终创建一个密集数组。

js
const arr = [1, , 3, 4, , 6];
console.log(arr.with(0, 2)); // [2, undefined, 3, 4, undefined, 6]

在非数组对象上调用 with()

with()方法创建并返回一个新数组。它读取thislength属性,然后访问每个键为非负整数且小于length的属性。访问this的每个属性时,索引等于属性键的数组元素将设置为属性的值。最后,数组index处的值将设置为value

js
const arrayLike = {
  length: 3,
  unrelated: "foo",
  0: 5,
  2: 4,
  3: 3, // ignored by with() since length is 3
};
console.log(Array.prototype.with.call(arrayLike, 0, 1));
// [ 1, undefined, 4 ]

规范

规范
ECMAScript 语言规范
# sec-array.prototype.with

浏览器兼容性

BCD 表仅在浏览器中加载

另请参阅