👉 Giải Thuật 👈

Lấy phần tử duy nhất có trong mảng

Bằng phương pháp có sẵng hoặc tự viết
js_masterGiải Thuật
cau-truc-du-lieu-va-giai-thuat.jpg

Chào các bạn nhé

Sau bao ngày tìm hiểu về string hôm nay mình chuyển chủ đế qua array tí.

Trong bài viết này mình sẽ hướng dẫn bạn tìm phần tử duy nhất có trong mảng.

  1. Phương pháp có sẵng
1let arrayData = [3, 4, 1, 3, 2, 4, 1, 0];
2
3function getPhanTuDuyNhat(array) {
4    let obj = array.reduce((prevent, current) => {
5        if (current in prevent) {
6            prevent[current] = ++prevent[current];
7        } else {
8            prevent[current] = 1;
9        }
10        return prevent;
11    }, {});
12
13    // Đến đây
14    // obj = {0: 1, 1: 2, 2: 1, 3: 2, 4: 2}
15
16    let result = []; // Tạo biến lưu kết quả
17
18    for (let [key, val] of Object.entries(obj)) {
19        if (val === 1) {
20            // if thỏa mãn điều kiện
21            result.push(key); // thêm nó vào kết quả
22        }
23    }
24
25    // result = ['0', '2']
26    return result; // trả kết quả về
27}
28
29console.log(getPhanTuDuyNhat(arrayData)); // ['0', '2']

Vậy là chúng ta đã làm tìm được phần tử duy nhất có trong mảng. Nhược điểm bây giờ chúng ta thấy 3 lần lặp.

Chúng ta hãy tối ưu hóa nó tiếp.

  1. Phương pháp tự viết
1let arrayData = [3, 4, 1, 3, 2, 4, 1, 0];
2
3function getPhanTuDuyNhat(array) {
4    let obj = {}; // Tạo obj đếm từng key
5    let result = {}; // Tạo object lưu giá trị
6    for (let val of array) {
7        if (val in obj) {
8            obj[val] = ++obj[val]; // Nếu có trong obj thì tăng giá trị lên 1
9            delete result[val]; // Đồng thời xóa nó trong kết quả. Vì nó không phải là giá trị duy nhất
10        } else {
11            obj[val] = 1; // Thêm nó vào `obj` và gán giá trị là 1
12            result[val] = val; // Thêm nó vào `result` và gán giá trị bằng chính phần tử đó
13        }
14    }
15    return Object.values(result); // Biến nó thành `array` kết quả và trả về
16}
17
18console.log(getPhanTuDuyNhat(arrayData)); // ['0', '2']

Các bạn thấy cách giải thứ 2 nó thế nào ???. Tuy nó không hoàn hảo nhưng chạy được. Ưu diểm bây giờ là mình tận dụng vòng lặp. Cứ hạn chế lặp nhiều là cách giải sẻ tốt.

Nếu các bạn có nhiều cách giải hơn cứ mạnh dạn chia sẽ nhé.

Mình sẽ sửa lại và thêm nó vào trang web. Chúc các bạn học tập dc nhiều điều hay.

  • array
  • duy nhất
  • mảng
  • phần tử

OFFJS.COM - Blog học tập giải trí - 🐲

Chia sẻ nhiều kiến thức thú vị trong lập trình cũng như cuộc sống.

Giới thiệu


Trang web này mình sẽ nói về kiến thức lập trình và cuộc sống mà các bạn mới học hay đang dự định học. Có một bước đi đầu đời vững chắc.

Hồ Quang Trí.jpg

Đi kèm với đó là những lý thuyết và các dòng code minh họa. Để các bạn dễ hình dung.

Đơn nhiên cũng không dễ dàng ngày một ngày hai mà học hết được.

Học Tập Là Một Con Đường Dài Vô Tận

Nó sẽ nuốt các bạn vô số thời gian nhưng bù lại khi đã biết thì mọi thứ thật là tuyệt.

1console.log("Hồ Quang Trí");

Nếu có ai nói bạn học lập trình trong vòng 3 đến 6 tháng thì mình xin nói thật không bao giờ có chuyện đó nhé.

Chúc các bạn thành công.

Chân trang

phone-toan-phat.png

0353210168

address-toan-phat.png

Việt Nam