Array.prototype.toSpliced()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2023.
Phương thức toSpliced() của các đối tượng Array là phiên bản sao chép của phương thức splice(). Nó trả về một mảng mới với một số phần tử bị xóa và/hoặc thay thế tại một chỉ mục nhất định.
Cú pháp
toSpliced(start)
toSpliced(start, skipCount)
toSpliced(start, skipCount, item1)
toSpliced(start, skipCount, item1, item2)
toSpliced(start, skipCount, item1, item2, /* …, */ itemN)
Tham số
start-
Chỉ mục từ 0 để bắt đầu thay đổi mảng, được chuyển đổi thành số nguyên.
- Chỉ mục âm đếm ngược từ cuối mảng — nếu
-array.length <= start < 0, sẽ dùngstart + array.length. - Nếu
start < -array.lengthhoặcstartbị bỏ qua, sẽ dùng0. - Nếu
start >= array.length, không phần tử nào bị xóa, nhưng phương thức sẽ hoạt động như một hàm thêm, thêm nhiều phần tử như được cung cấp.
- Chỉ mục âm đếm ngược từ cuối mảng — nếu
skipCountOptional-
Số nguyên chỉ ra số lượng phần tử trong mảng cần xóa (hay bỏ qua) từ
start.Nếu
skipCountbị bỏ qua, hoặc nếu giá trị của nó lớn hơn hoặc bằng số lượng phần tử sau vị trí được chỉ định bởistart, thì tất cả các phần tử từstartđến cuối mảng sẽ bị xóa. Tuy nhiên, nếu bạn muốn truyền tham sốitemN, bạn nên truyềnInfinitylàmskipCountđể xóa tất cả các phần tử saustart, vìundefinedtường minh bị chuyển đổi thành0.Nếu
skipCountlà0hoặc âm, không có phần tử nào bị xóa. Trong trường hợp này, bạn nên chỉ định ít nhất một phần tử mới (xem bên dưới). item1, …,itemNOptional-
Các phần tử cần thêm vào mảng, bắt đầu từ
start.Nếu bạn không chỉ định bất kỳ phần tử nào,
toSpliced()sẽ chỉ xóa các phần tử khỏi mảng.
Giá trị trả về
Một mảng mới bao gồm tất cả các phần tử trước start, item1, item2, …, itemN, và tất cả các phần tử sau start + skipCount.
Mô tả
Phương thức toSpliced(), giống như splice(), thực hiện nhiều thao tác cùng lúc: nó xóa số lượng phần tử nhất định khỏi mảng, bắt đầu từ chỉ mục nhất định, sau đó chèn các phần tử nhất định tại cùng chỉ mục đó. Tuy nhiên, nó trả về một mảng mới thay vì sửa đổi mảng gốc. Do đó, các phần tử bị xóa không được trả về từ phương thức này, nhưng chúng vẫn có thể truy cập trong mảng gốc.
Phương thức toSpliced() không bao giờ tạo ra mảng thưa. Nếu mảng nguồn thưa, các vị trí trống sẽ được thay thế bằng undefined trong mảng mới.
Phương thức toSpliced() là phương thức tổng quát. Nó chỉ yêu cầu giá trị this có thuộc tính length và các thuộc tính có khóa là số nguyên.
Ví dụ
>Xóa, thêm và thay thế các phần tử
Bạn có thể dùng toSpliced() để xóa, thêm và thay thế các phần tử trong mảng và tạo mảng mới hiệu quả hơn so với dùng slice() và concat().
const months = ["Jan", "Mar", "Apr", "May"];
// Inserting an element at index 1
const months2 = months.toSpliced(1, 0, "Feb");
console.log(months2); // ["Jan", "Feb", "Mar", "Apr", "May"]
// Deleting two elements starting from index 2
const months3 = months2.toSpliced(2, 2);
console.log(months3); // ["Jan", "Feb", "May"]
// Replacing one element at index 1 with two new elements
const months4 = months3.toSpliced(1, 1, "Feb", "Mar");
console.log(months4); // ["Jan", "Feb", "Mar", "May"]
// Original array is not modified
console.log(months); // ["Jan", "Mar", "Apr", "May"]
Sử dụng toSpliced() trên mảng thưa
Phương thức toSpliced() luôn tạo ra một mảng dày đặc.
const arr = [1, , 3, 4, , 6];
console.log(arr.toSpliced(1, 2)); // [1, 4, undefined, 6]
Gọi toSpliced() trên đối tượng không phải mảng
Phương thức toSpliced() đọc thuộc tính length của this. Sau đó nó đọc các thuộc tính có khóa nguyên cần thiết và ghi chúng vào mảng mới.
const arrayLike = {
length: 3,
unrelated: "foo",
0: 5,
2: 4,
};
console.log(Array.prototype.toSpliced.call(arrayLike, 0, 1, 2, 3));
// [2, 3, undefined, 4]
Thông số kỹ thuật
| Thông số kỹ thuật |
|---|
| ECMAScript® 2027 Language Specification> # sec-array.prototype.tospliced> |