在面试的过程中,经常被问到Array (数组)如何去重,回答的好不好直接可以影响到offer
拿不拿的到,还可以为作为一个谈薪资
的筹码。(还有其他的可以提供一起来交流学习)
数组去重的N个方法:
通过ES6中的Set
语法(会有兼容性问题):
function unique (arr) {
return Array.from( new Set(arr))
}
function unique1 (arr) {
return [ ...new Set(arr)]
}
var arr = [ 1, 2, '2', 'a', 'b', '2', 3, 5, 'a', '{}','{}']
console.log(unique(arr), 'unique', unique1(arr))
// [1, 2, "2", "a", "b", 3, 5, "{}"] 结果是一样的
利用ES6中indexOf()
+ fifter()
方法去重:
function unique (arr) {
return Array.isArray(arr) && (
arr.filter((item, index, arr) => {
// indexOf()会找当前元素item在数组中的第一次出现时的下标
return arr.indexOf(item) === index
})
)
}
var arr = [ 1, 2, '2', 'a', 'b', '2', 3, 5, 'a', '{}','{}']
console.log(unique(arr))
// [1, 2, "2", "a", "b", 3, 5, "{}"]
双重for
循环+splice()
改变原数组的方法去重(⚠️:对于数组类型(Number),用于排序):