Tiếp nối bài viết trước của mình Làm thế nào loại bỏ phần tử trùng lặp khỏi array trong Javascript, hôm nay mình sẽ giới thiệu đến các bạn cách loại bỏ object trùng lặp ra khỏi một array trong Javascript (JS).
Code dành cho những bạn không muốn đọc dài dòng =)))).
1 | var originalArray = [ |
Quy trình giải quyết
Giả sử mình có mảng như sau:
1 | var animals = [ |
Như bạn có thể thấy, mảng animals
này chứa 26 objects với mỗi object có properties là id
và name
, và id
bị trùng lặp trong mảng khá nhiều. Và bạn muốn loại bỏ những object có id
bị lặp lại.
Để thực hiện điều này thì ý tưởng sẽ như sau:
- Đầu tiên sẽ tạo một mảng tạm chỉ chứa id của object. Ví dụ
[1, 2, 1, 3, 2, 10, ...]
. - Kiểm tra xem id nào bị lặp lại, nếu lặp lại thì đánh dấu ngay chỗ
index
của nó bằngfalse
hoặcnull
,undefined
gì gì cũng được, nếu là duy nhất thì trả về lạiindex
của nó. Ví dụ[0, 1, 2, 3, 4, 5, false, 7, 8, 9, false, ...]
. - Loại bỏ hết
false
ra khỏi mảng tạm, lúc này mảng tạm chỉ chứaindex
của object có id duy nhất mà thôi. - Cuối cùng lấy ra object có
index
trong bảng tạm.
Chúng ta sẽ sử dụng hai method có sẵn trong JS đó là map
và filter
để thực hiện điều này (yêu cầu phải hiểu cách map và filter hoạt động). Oke let’s go.
Thực hiện
1 | // step 1 |
Viết dài dòng dùng cú pháp bình thường siêu rõ ràng thì sẽ như sau:
1 | // step 1 |
Viết ngắn gọn lại:
1 | let uniqueAnimals = animals |
Tóm lại
Mình có vài lưu ý nhỏ như sau:
- Nếu viết dài dòng (tạo mảng tạm) thì sẽ tạo ra mảng có độ dài tương đương mảng gốc, nếu với dữ liệu lớn xử lý sẽ hơi chậm.
- Chỗ
map(v => v['id'])
bạn có thể thayid
bằng property khác của object,name
chẳng hạn, thì lúc này nó sẽ check xem name có trùng lặp hay không. - Nếu kiểm tra duplicate với 2 property thì sẽ như thế nào nhỉ :)). Bạn đọc thử suy nghĩ thử xem nào.
À bạn biết name trong mảng animals kia hông. Mình post lên đây lun nhé, tranh thủ luyện tiếng anh tý đó mà :))
Ant 🐜: con kiến
Antelope 🦌: linh dương (chắc giống con deer, hươu)
Avocet: giống loài chim gì đó giống cò mà đẹp hơn cò nhiều (search wiki là thấy)
Badger 🦡: con lửng
Camel 🐪: lạc đà
Coyote 🐺: chó sói (sói ngoài đồng cỏ)
Crocodile 🐊: cá sấu
Eagle 🦅: đại bàng
Falcon: chim ưng
Flamingo 🦩: chim hồng hạc
Gecko 🦎: con thạch sùng hay tắc kè chi đó (còn tên khác là lizard)
Guppy: cá bảy màu hoặc cá đẹp đẹp nhiều màu cũng được
Harrier: tên chung chỉ các loại chim phá hoại như diều hâu (Hen harrier, Northern harrier, …)
Iguana: con kỳ nhông
Jaguar 🐆: báo đốm (cũng là tên loại xe thì phải) ngoài ra còn có tên leopard
Jellyfish: sứa
Kingfisher: chim bói cá
Lion 🦁: sư tử
Panther: báo đen
Macaw 🦜: vẹt tên khác là parrot
Nightingale: họa mi
Octopus 🐙: bạch tuột
Otter 🦦: rái cá
Flamingo guppy: cá hồng hạc :v