Loại bỏ các phần tử trùng lặp trong một mảng các object với Javascript

By dat, 771 View
#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 31
Gill, Tâm đã thích bài viết này

4 comments:

  1. avatar dat says:

    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ần42

  2. avatar Dai says:

    42