Loại bỏ các phần tử trùng lặp trong một mảng các object với Javascript
#TOP
Hầu hết các ngôn ngữ khác đều có hàm loại bỏ các phần tử/thuộc tính trùng lặp khỏi mảng/khối (tui tự thắc mắc liệu nó có loại bỏ các khối trùng trong mảng không?)Thế nhưng, javascript méo có :[
Mặc dù có thể loại bỏ các phần tử trùng lặp bằng 1 dòng code ngắn
array.filter((v, i) => array.indexOf(v) === i)
Tuy nhiên đoạn code trên không thể loại bỏ các khối giống nhau trong mảng
Thế, làm thế nào?
Câu trả lời easy như sau:
function uniqueArrayOfObjects (arrayOfObjects, callback) {
if (typeof callback !== 'function') callback = compare2Objects
return arrayOfObjects.filter((item, index) => index == arrayOfObjects.findIndex(x => callback(item, x)))
}
function compare2Objects (a, b) {
return JSON.stringify(a) === JSON.stringify(b)
}
let data = [
{ name: 'Dat', age: '??' },
{ name: 'Dat', age: 'chua 18~' },
{ name: 'Dai', age: '??' },
{ name: 'Trum', age: '??' },
{ name: 'Ken', age: '??' },
{ name: 'Dai', age: '??' }
]
console.log(uniqueArrayOfObjects(data))
console.log("
với callback
", uniqueArrayOfObjects(data, (a, b) => {
return a.name == b.name
}))
Đọc code tự hiểu nhá, tui lười giải thích
E hèm, khuyến khích các bạn dùng code này nên viết callback nhá, sẽ nhanh hơn so với để không vậy, thậm chí có thể nhanh hơn 100 lần