JavaScript Array fill() (填充陣列)

陣列 (array) 的 fill() 方法用來將陣列中的所有元素(或指定範圍的元素)都填入一個固定的值。此方法會修改原陣列。

語法:

arr.fill(value[, start[, end]])
  • value 是用來填充的值
  • start 是可選的起始索引,預設是 0
  • end 是可選的結束索引(不含),預設是陣列長度

基本用法

var arr = [1, 2, 3, 4, 5];

arr.fill(0);
console.log(arr);  // [0, 0, 0, 0, 0]

指定填充範圍

var arr = [1, 2, 3, 4, 5];

// 從索引 2 開始填充到結尾
arr.fill(0, 2);
console.log(arr);  // [1, 2, 0, 0, 0]
var arr = [1, 2, 3, 4, 5];

// 從索引 1 填充到索引 3(不含)
arr.fill(0, 1, 3);
console.log(arr);  // [1, 0, 0, 4, 5]

建立並初始化陣列

// 建立長度為 5 的陣列,全部填入 0
var zeros = new Array(5).fill(0);
console.log(zeros);  // [0, 0, 0, 0, 0]

// 建立預設值陣列
var defaults = new Array(3).fill('default');
console.log(defaults);  // ['default', 'default', 'default']

注意:填充物件會是同一個參考

// 錯誤示範:所有元素都指向同一個物件
var arr = new Array(3).fill({});
arr[0].name = 'Mike';
console.log(arr);
// [{ name: 'Mike' }, { name: 'Mike' }, { name: 'Mike' }]
// 三個都是同一個物件!

// 正確做法:使用 Array.from() 或 map()
var arr = Array.from({ length: 3 }, function() {
    return {};
});
arr[0].name = 'Mike';
console.log(arr);
// [{ name: 'Mike' }, {}, {}]

實際應用

// 重設分數
var scores = [85, 90, 78, 92, 88];
scores.fill(0);  // 全部歸零

// 建立棋盤初始狀態
var board = new Array(9).fill(null);
// [null, null, null, null, null, null, null, null, null]

// 建立二維陣列(注意要用正確方式)
var grid = Array.from({ length: 3 }, function() {
    return new Array(3).fill(0);
});
// [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
fill() 是 ES6 新增的方法。fill() 會修改原陣列並回傳修改後的陣列。注意填充物件或陣列時,所有位置都會是同一個參考。