Array.prototype.fill()

fill() 方法用一个固定值填充一个数组中从起始索引(默认为 0)到终止索引(默认为 array.length)内的全部元素。它返回修改后的数组。

尝试一下

语法

fill(value)
fill(value, start)
fill(value, start, end)

参数

value

用来填充数组元素的值。注意所有数组中的元素都将是这个确定的值:如果 value 是个对象,那么数组的每一项都会引用这个元素。

start 可选

基于零的索引,从此开始填充,转换为整数

  • 负数索引从数组的末端开始计算,如果 start < 0,则使用 start + array.length
  • 如果 start < -array.lengthstart 被省略,则使用 0
  • 如果 start >= array.length,没有索引被填充。
end 可选

基于零的索引,在此结束填充,转换为整数fill() 填充到但不包含 end 索引。

  • 负数索引从数组的末端开始计算,如果 end < 0,则使用 end + array.length
  • 如果 end < -array.length,则使用 0
  • 如果 end >= array.lengthend 被省略,则使用 array.length,导致所有索引都被填充。
  • 如果经标准化后,end 的位置在 start 之前或之上,没有索引被填充。

返回值

value 填充修改后的数组。

描述

fill() 是个修改方法,不会改变 this 的长度,但会改变 this 的内容。

fill() 也会使用 value 填充稀疏数组的空槽。

fill() 方法是通用的。它只期望 this 值有一个 length 属性。虽然字符串也是类似数组的,但这个方法不适合应用于它们,因为字符串是不可变的。

备注: 在一个空数组(length = 0)上使用 Array.prototype.fill() 不会对其进行修改,因为数组没有要修改的内容。要在声明一个数组时使用 Array.prototype.fill(),请确保数组的 length 不为零。参见示例

示例

使用 fill

console.log([1, 2, 3].fill(4)); // [4, 4, 4]
console.log([1, 2, 3].fill(4, 1)); // [1, 4, 4]
console.log([1, 2, 3].fill(4, 1, 2)); // [1, 4, 3]
console.log([1, 2, 3].fill(4, 1, 1)); // [1, 2, 3]
console.log([1, 2, 3].fill(4, 3, 3)); // [1, 2, 3]
console.log([1, 2, 3].fill(4, -3, -2)); // [4, 2, 3]
console.log([1, 2, 3].fill(4, NaN, NaN)); // [1, 2, 3]
console.log([1, 2, 3].fill(4, 3, 5)); // [1, 2, 3]
console.log(Array(3).fill(4)); // [4, 4, 4]

// 一个简单的对象,被数组的每个空槽所引用
const arr = Array(3).fill({}); // [{}, {}, {}]
arr[0].hi = "hi"; // [{ hi: "hi" }, { hi: "hi" }, { hi: "hi" }]

使用 fill() 创建全 1 矩阵

此示例演示了如何创建全 1 的矩阵,就像 Octave 或 MATLAB 的 ones() 函数做到的那样。

const arr = new Array(3);
for (let i = 0; i < arr.length; i++) {
  arr[i] = new Array(4).fill(1); // 创建一个大小为 4 的数组,填充全 1
}
arr[0][0] = 10;
console.log(arr[0][0]); // 10
console.log(arr[1][0]); // 1
console.log(arr[2][0]); // 1

使用 fill() 填充空数组

此示例演示了如何填充数组,将所有值设定为一个特定的值。无需指定 end 参数。

const tempGirls = Array(5).fill("girl", 0);

注意,数组最初为稀疏数组,没有分配索引。fill() 仍然可以填充这个数组。

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

fill() 方法读取 thislength 属性,并设置从 startend 的每个整数属性的值。

const arrayLike = { length: 2 };
console.log(Array.prototype.fill.call(arrayLike, 1));
// { '0': 1, '1': 1, length: 2 }

规范

Specification
ECMAScript Language Specification
# sec-array.prototype.fill

浏览器兼容性

BCD tables only load in the browser

参见