Vài ngày trước, tôi đã viết một mã liên quan đến việc hợp nhất hai mảng lớn mà không trùng lặp. Phản ứng đầu tiên của tôi là viết một hàm rút gọn khởi tạo bộ tích lũy, lặp lại mọi phần tử và kiểm tra xem nó đã có trong mảng chưa tốc độ hiệu suất. 0. 2749999985098839 mili giây Giải pháp này hoạt động tốt với tôi, nhưng tôi tự hỏi liệu tôi có thể cải thiện hiệu suất thêm một chút hay không và kết quả là tôi có một vài giải pháp Đối với mục đích thử nghiệm, mỗi phương pháp được mô tả sử dụng cùng một mảng Ngoài ra, tôi sẽ kiểm tra tốc độ thực thi ở cuối mỗi chức năng với hiệu suất. Hiện nay() giải pháp đầu tiênCách truyền thống để hoàn thành tác vụ là khởi tạo một mảng kết quả trống có chứa các mục kết quả, tạo một vòng lặp cho mỗi mảng phải được hợp nhất và lưu trữ phần tử hiện tại trong mảng kết quả nếu nó không có mặt. Sự hiện diện được kiểm tra bằng indexOf sẽ trả về -1 nếu không tốc độ hiệu suất. 0. 41500001680105925 mili giây giải pháp thứ haiSử dụng ES5, chúng ta có thể hợp nhất hai mảng đầu vào mà không loại bỏ các bản sao với. concat() và sau đó lặp lại qua mảng kết quả và loại bỏ các bản sao bằng cách sử dụng indexOf tốc độ hiệu suất. 0. 5300000193528831 mili giây giải pháp thứ baNhìn chung, phương pháp rút gọn lúc đầu vẫn có hiệu suất tốt hơn. Giữa hai giải pháp cuối cùng không có sự khác biệt đáng kể về độ phức tạp và tốc độ thực thi, nhưng giải pháp thứ hai rõ ràng hơn và dễ đọc hơn. Chúng ta có thể tiến thêm một bước và tính đến tính năng Bộ ES6, tính năng này lấy tất cả các giá trị từ một đối tượng có thể lặp lại, trong trường hợp của chúng ta là một mảng, nhưng vì mọi phần tử trong một bộ phải là duy nhất trong bộ sưu tập, nên nó sẽ bỏ qua các bản sao mà không có bất kỳ Khi tạo Tập hợp, hãy nhớ rằng null được coi là không xác định và đó là một khái niệm khác với mảng. một Tập hợp là một "bộ sưu tập có khóa" trong khi bộ thứ hai là một "bộ sưu tập được lập chỉ mục" Đây là mã tốc độ hiệu suất. 0. 13499998021870852 mili giây Vì chúng tôi không muốn kết quả là một Tập hợp mới, chúng tôi sẽ chỉ hủy cấu trúc nó thành một mảng Phần kết luậnGiải pháp cuối cùng là những gì tôi đang tìm kiếm, nó dễ đọc nhất và có độ phức tạp thấp nhất, mang lại hiệu suất tuyệt vời so với hai giải pháp kia. Cuối cùng tôi đã đưa đoạn mã đó vào ứng dụng của mình để trừu tượng hóa nó thành một chức năng mới. Cảm ơn, tôi hy vọng điều này đủ hữu ích;) Trong bài viết này, mình sẽ giới thiệu 3 cách để lọc phần tử 4 từ một mảng và trả về chỉ những phần tử duy nhất. Sở thích của mình là sử dụng 5 vì cú pháp rút gọn và cực kỳ đơn giản
1. Use SetHãy để mình bắt đầu trước bằng cách giải thích 5 là gì5 là một đối tượng dữ liệu mới được giới thiệu trong ES6. Because Được rồi, quay lại đoạn mã ở trên và kiểm tra xem có chuyện gì xảy ra. Có 2 điều sẽ xảy ra ở đây
Change Set to a array using Array. từHoặc bạn có thể sử dụng Array. from to change a 5 into an an array________số 8_______2. Use filterĐể hiểu được tùy chọn này, chúng ta sẽ đi qua 2 phương thức đang làm. 3 và 4Chỉ sốPhương thức 3 trả về vị trí (chỉ mục) đầu tiên nó được tìm thấy của phần tử được cung cấp từ mảng
lọcPhương thức 6 tạo ra một mảng mới các phần tử ngoại điều kiện mà chúng ta cung cấp. Nói cách khác, nếu phần tử đối xứng và trả về 7, nó sẽ được chứa trong mảng đã được lọc. Và bất kỳ phần tử nào không hiển thị, trả về 8, nó sẽ không nằm trong mảng đã được lọcHãy đi từng bước và xem chuyện gì xảy ra
Bên dưới là đầu ra từ bảng điều khiển. log only on on. Repeat value is place index notmatch with 3. Vì thế trong các trường hợp đó, điều kiện sẽ sai và sẽ không nằm trong mảng được lọcItemIndexindexOfCondition🐣00true111true222true🐣30false🐣40false355trueReplicate valueChúng ta cũng có thể sử dụng bộ lọc phương thức để lấy ra các giá trị trùng lặp từ mảng. Chúng ta cũng có thể làm điều này bằng cách đơn giản điều chỉnh điều kiện của chúng ta như sau
lặp lại, nếu chúng ta lặp lại các bước bên trên và nhìn ra đầu ItemIndexindexOfCondition🐣00false111false222false🐣30true🐣40true355false3. Sử dụng GiảmSử dụng phương thức reduce là để giảm số phần tử của mảng và tổ hợp (kết hợp) chúng vào mảng cuối cùng dựa trên một hàm giảm hàm số mà bạn đã đưa vào Trong trường hợp này, hàm reduce của chúng ta sẽ kiểm tra xem cuối cùng của mảng có chứa mục hay không. If it not, write item that into the last array. Mặt khác, bỏ qua phần tử đó và chỉ trả lại một mảng cuối cùng của chúng ta (về cơ bản bỏ qua phần tử đó) |