常见面试题-数组去重的实现
暴力遍历,indexOf
Array.prototype.deduplicate = function(array) {
let result = []
for(var i = 0; i < array.length; i++) {
if(result.indexOf(array[i]) === -1) {
result.push(array[i])
}
}
return result
}
let a = [1,2,3,4,2,3,4]
console.log(a.deduplicate(a)) // [1,2,3,4]
index 另一种思路
Array.prototype.deduplicate = function(array) {
return array.filter((item, index) => array.indexOf(item) === index)
}
let a = [1,2,3,4,2,3,4]
console.log(a.deduplicate(a))
reduce
Array.prototype.deduplicate = function(array) {
return array.reduce((prev, cur) => {
return prev.includes(cur) ? prev : [...prev, cur]
}, []) // 提供reduce初始值
}
let a = [1,2,3,4,2,3,4]
console.log(a.deduplicate(a))
map
Array.prototype.deduplicate = function(array) {
let result = [], current = new Map()
for(var i = 0; i < array.length; i++) {
if(current.get(array[i]) === undefined) {
current.set(array[i], 0)
result.push(array[i])
}
}
return result
}
let a = [1,2,3,4,2,3,4]
console.log(a.deduplicate(a)) // [1,2,3,4]
set
Array.prototype.deduplicate = function(array) {
return Array.from(new Set(array))
}
let a = [1,2,3,4,2,3,4]
console.log(a.deduplicate(a)) // [1,2,3,4]