- vừa được xem lúc

Chèn 1 mảng lớn vào trong 1 mảng khác dùng Spread Operator (rest parameters) là chưa ổn?

0 0 22

Người đăng: Thắng XD

Theo Viblo Asia

Đôi khi bạn sẽ cần chèn 1 mảng vào giữa 1 mảng khác tại vị trí index nào đó.

Ví dụ bạn cần chèn mảng B vào mảng a tại index = 2 trong mảng A:

const B = [10,20,30,40,50];

let A = [1,2,3,4,5];

*Nếu bạn đặt câu hỏi vào Stack Overflow (SO) sẽ nhận được 1 cú pháp rất đơn giản như sau :

https://stackoverflow.com/questions/7032550/javascript-insert-an-array-inside-another-array

(CÁCH 1) A.splice(2,0,...B); //kết quả [1,2,10,20,30,40,50,3,4,5]

*Đây là accepted answer trên SO nhưng bạn hãy THỬ DÙNG CÁCH NÀY TRONG TRƯỜNG HỢP BẠN CẦN XỬ LÝ 1 MẢNG SỐ LIỆU RẤT LỚN. Dự án thực tế của tôi xử lý đến hơn 200k phần tử :

let C = [];

for(let i=0;i<200000;i++){ C.push(i); }

A.splice(2,0,...C);

Bạn sẽ nhận được lỗi : RangeError: Maximum call stack size exceeded. Nghĩa là có quá nhiều biến được truyền vào hàm splice vì bản chất của Spead Operator là tách các phần tử trong mảng ra làm một dãi các biến độc lập truyền vào 1 hàm nào đó.

*CÁCH TÔI GIẢI QUYẾT ĐƠN GIẢN LÀ TẠO 1 FUNCTION :

//*function chèn 1 array vào giữa 1 array

(CÁCH 2)

function insertArray(origin,index,inserted){

if(index>0 && index<origin.length-1){ const chunk1 = origin.slice(0,index); const chunk2 = origin.slice(index); return [].concat(chunk1,inserted,chunk2); } return null;

}

*kiểm tra lại :

const rs = insertArray(A,2,C);

console.log(rs.length); //kết quả 200010 => bạn có thể log ra vài phần tử để kiểm chứng.

*Thực tế, nếu khi bạn biết chắc dữ liệu của mình có số lượng phần tử cố định hãy áp dụng cách 1, còn không để chắc ăn không bị dính lỗi thì bạn nên kiểm tra đầu vào như sau :

//*chèn 1 array vào giữa 1 array

function insertArray(origin,index,inserted){

if(inserted.length>100000){ if(index>0 && index<origin.length-1){ const chunk1 = origin.slice(0,index); const chunk2 = origin.slice(index); return [].concat(chunk1,inserted,chunk2); }else{ return null; } }else{ return origin.splice(index,0,...inserted); }

}

Trên đây tôi xin chia sẽ một chú ý rất quan trọng trong lập trình thực tế trên JS. Xin cám ơn mọi người!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Array trong Javascript

Xin chào mọi người. Hy vọng sẽ được thảo luận cùng anh em. Không để chờ lâu bắt đầu luôn nào. Để chạy thử ví dụ các bạn có thể vào https://jsfiddle.

0 0 25

- vừa được xem lúc

Top những cách copy mảng, object mà lập trình viên JS không thể bỏ qua

Trường hợp mảng gồm các phần tử có kiểu dữ liệu primitive. const input = [3, 5, 7, 9];. . .

0 0 24

- vừa được xem lúc

Mẹo phân biệt splice và slice không bao giờ bị nhầm lẫn trường hợp sử dụng

Thống kê từ google trends cho thấy có khá nhiều người quan tâm đến vấn đề so sánh slice và splice. Hai hàm này cũng không có gì quá đặc biệt, nó chỉ là các hàm trong prototype của mảng, được xếp cùng

0 0 36

- vừa được xem lúc

Giới thiệu Javascript

Mục tiêu bài viết. . Giới thiệu về ngôn ngữ Javascript. Giới thiệu một vài ví dụ về Javascript.

0 0 18

- vừa được xem lúc

Blog#2: Bí kíp về mảng trong JavaScript - Các các hàm thường sử dụng với Array kèm ví dụ trực quan 😊 (Series: Bí kíp Javascript - PHẦN 2)

Mình là TUẤN hiện đang là một Full-stack Developer tại Tokyo . Trong lập trình, array là một tập hợp các elements hoặc items.

0 0 22

- vừa được xem lúc

MỌI THỨ VỀ JAVASCRIPT

Trang chủ Life at MWG Kinh nghiệm việc làm Keyword là gì? Cách tìm và sử dụng từ khóa SEO hiệu quả 04/03/2022 - Lượt xem: 2460 Để trang của bạn được ở một vị trí cao trong việc tìm kiếm thì nghiên cứu

0 0 16