Có một số câu trả lời thực sự sáng tạo cho câu hỏi này ở đây. Đây là một giải pháp đơn giản cho những người mới bắt đầu với mảng. Nó có thể được thực hiện để hoạt động trên tất cả các trình duyệt tuân thủ ECMAScript 3, nếu muốn.
Biết một số điều về mối nối trước khi bắt đầu.
Mạng nhà phát triển Mozilla: Array.prototype.splice ()
Trước tiên, hãy hiểu hai hình thức quan trọng của .splice()
.
let a1 = [1,2,3,4],
a2 = [1,2];
Phương pháp 1) Loại bỏ x (deleteCount) phần tử, bắt đầu từ một chỉ mục mong muốn.
let startIndex = 0,
deleteCount = 2;
a1.splice(startIndex, deleteCount);
Phương pháp 2) Loại bỏ các phần tử sau chỉ số bắt đầu mong muốn đến cuối mảng.
a1.splice(2);
Khi sử dụng .splice()
, mục tiêu có thể là chia a1
thành mảng đầu và mảng bằng cách sử dụng một trong hai dạng trên.
Sử dụng phương pháp # 1, giá trị trả về sẽ trở thành phần đầu và a1
phần đuôi.
let head = a1.splice(startIndex, deleteCount);
Bây giờ, trong một cú ngã sà xuống, hãy nối đầu, thân ( a2
) và đuôi
[].concat(head, a2, a1);
Vì vậy, giải pháp này giống với thế giới thực hơn bất kỳ giải pháp nào khác được trình bày cho đến nay. Đây không phải là những gì bạn sẽ làm với Legos? ;-) Đây là một hàm, được thực hiện bằng phương pháp # 2.
function insertArray(target, body, startIndex)
{
let tail = target.splice(startIndex);
return [].concat(target, body, tail);
}
let newArray = insertArray([1, 2, 3, 4], ["a", "b"], 2);
Ngắn hơn:
function insertArray(target, body, startIndex)
{
return [].concat(target, body, target.splice(startIndex));
}
An toàn hơn:
function insertArray(target, body, startIndex)
{
const ARRAY_START = 0,
ARRAY_END = target.length - 1,
ARRAY_NEG_END = -1,
START_INDEX_MAGNITUDE = Math.abs(startIndex);
if (startIndex === ARRAY_START) {
throw new Error("The value for startIndex cannot be zero (0).");
}
if (startIndex === ARRAY_END || startIndex === ARRAY_NEG_END) {
throw new Error("The startIndex cannot be equal to the last index in target, or -1.");
}
if (START_INDEX_MAGNITUDE >= ARRAY_END) {
throw new Error("The absolute value of startIndex must be less than the last index.");
}
return [].concat(target, body, target.splice(startIndex));
}
Những ưu điểm của giải pháp này bao gồm:
1) Một tiền đề đơn giản chiếm ưu thế trong giải pháp - điền vào một mảng trống.
2) Danh pháp đầu, thân và đuôi cảm thấy tự nhiên.
3) Không có cuộc gọi kép tới .slice()
. Không cắt chút nào.
4) Không .apply()
. Rất không cần thiết.
5) Chuỗi phương pháp được tránh.
6) Hoạt động trong ECMAScript 3 và 5 đơn giản bằng cách sử dụng var
thay thế cho let
hoặc const
.
** 7) Đảm bảo rằng sẽ có đầu và đuôi để tát vào cơ thể, không giống như nhiều giải pháp khác được trình bày. Nếu bạn đang thêm một mảng trước hoặc sau, giới hạn, ít nhất bạn nên sử dụng .concat()
!!!!
Lưu ý: Việc sử dụng công cụ quảng cáo lan truyền ...
làm cho tất cả những điều này trở nên dễ dàng hơn nhiều.