首页 > 试题广场 >

说一说数组去重都有哪些方法?

[问答题]
1.new Set(): let array = [...new Set(arr)] 2.indexOf: if(array.indexOf(arr[i]) == -1){ array.push(arr[i])} 或者 arr5.filter((item, index, self) => {return self.indexOf(item) === index}) 3.使用reduce+includes:return arr.reduce((prev,curr) => prev.includes(curr) ? prev : [...prev,curr],[])
发表于 2022-05-17 19:48:15 回复(2)
看下new的实现代码就知道了:1. 创建了一个空对象 2. 把空对象的原型指向构造函数的prototype 3. 执行构造函数并返回结果 4. 判断返回结果是否是空对象,如果是空对象返回新对象,否则就直接返回。
编辑于 2022-04-26 22:14:58 回复(0)
1.array.from(new Set(arr)):不考虑兼容性,这种方法去重代码最少。这种方法还没无法去掉“{}”空对象;2.利用for嵌套for,使用splice(ES5中常用);3.利用indexOf去重,新建一个空的结果数组,for循环原数组,判断结果数组中是否存在当前元素,如果存在则跳过,如果不存在,就push到结果数组;4.利用sort(倒叙方法,然后根据排序后的结果进行遍历及相邻的元素比较);5.利用include,判断数组中书否包含某个值,不包含则push,包含则跳过;6.利用map数据结构去重:创建一个空的map数据结构,遍历需要去重的数组,把数组的每个元素作为key存在map中。由于map中不会出现相同的值,所以最终得到的是去重之后的结果;7.[...new Set(arr)]
发表于 2022-07-20 09:42:44 回复(0)
方法一:利用对象属性key排除重复项:遍历数组,每次判断对象中是否存在该属性,不存在就存储在新数组中。 方法二:var mySet = new Set(arr),Array.from(mySet)将 Set 转为数组返回.这个方法的优点是效率更高,代码简单,思路清晰,缺点是可能会有兼容性问题 方法三:filter+indexof 去重:
发表于 2022-06-06 20:55:37 回复(0)
new Set();indexOf();双重for循环;filter筛选
发表于 2022-05-17 16:59:42 回复(0)
new Set(arr),for循环indexof==lastindexof,indexof==i
发表于 2022-04-26 13:00:33 回复(0)
遍历数组的方法:1.双循环2.filter,indexof3,es6 array.form(new set())4,includes()
发表于 2022-05-12 22:32:04 回复(0)
第四个没有看懂啊
发表于 2022-06-07 18:51:35 回复(4)
1、for循环+indexof,返回不为1的push到空数组中; 2、filter+indexof,返回为true的项组成的新数组 ; 3、es6新增数据结构set,set不允许出现重复的元素
发表于 2022-05-22 00:33:52 回复(0)
1、new Set 2、filter + 对象属性不重复 3、filter + indexOf
发表于 2022-05-06 17:33:39 回复(0)
null是定义,并赋值为null,表示对象的值未设置,typeof null的值就是object,相当于一个对象没有设置指针地址;undefined是定义未赋值。
编辑于 2022-04-30 16:56:10 回复(0)
// 方式一:普通去重 // 数组的去重 Array.prototype.unique = function () { let arr = [] let len = this.length for (let i = 0; i < len; i++) { if (arr.indexOf(this[i]) == -1) arr.push(this[i]) } return arr } // let res = arr.unique() // console.log(res); // 方式二:里调用对象的hash方式储存 Array.prototype.unique2 = function () { let arr = [] let len = this.length let json = {} for (let i = 0; i < len; i++) { if (typeof json[this[i]] == "undefined") { arr.push(this[i]) json[this[i]] = true } } return arr } // 方式三:排序,之后找不相等的就行 Array.prototype.unique3 = function () { this.sort((a, b) => a - b) let len = this.length let arr = [] for (let i = 0; i < len; i++) { if (this[i] !== arr[arr.length - 1]) { arr.push(this[i]) } } return arr } // 方式四:利用Set Array.prototype.unique4 = function () { return [...new Set(arr)] } // 利用Map去重 Array.prototype.unique5 = function () { let map = new Map() let arr = [] let len = this.length for (let i = 0; i < len; i++) { console.log(map.has(this[i])); if (!map.has(this[i])) { map.set(this[i], this[i]) arr.push(this[i]) } } console.log(map); return arr }
发表于 2022-09-03 15:25:10 回复(0)
第五个也太硬凑了吧
发表于 2022-07-01 22:52:35 回复(0)
new Set(),indexOf==lastIndexOf/filter indexOf,reduce includes,for for
发表于 2022-06-21 23:12:28 回复(0)
1.new Set() 2.filter+indexOf 3.reduce
发表于 2022-06-06 21:34:06 回复(0)
1.set 2.includes
发表于 2024-03-11 10:54:14 回复(0)
1. new Set 2. 双重循环 fliter 和indexof
发表于 2024-03-04 15:58:15 回复(0)
set是代码量最少的办法,也可以创建一个对象,使用数组的每一项充当对象的key,利用对象key值的唯一性做去重处理
编辑于 2024-03-03 15:18:29 回复(0)
set函数、filter结合indexOf,foreach、Map(对象属性的唯一性)、includes结合push
发表于 2024-02-28 10:03:58 回复(0)
1. const arr1 = [1, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, 8, 9, 10] const arr2 = [...new Set(arr1)] 2. const arr1 = [1, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, 8, 9, 10] const arr2 = arr1.filter((item, index) => { return arr1.indexOf(item) === index }) 3. const arr1 = [1, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, 8, 9, 10] const arr2 = arr1.reduce((pre, cur) => { if (!pre.includes(cur)) { pre.push(cur) } return pre }, []) 4. const arr1 = [1, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, 8, 9, 10] const arr2 = [] arr1.forEach((item) => { if (!arr2.includes(item)) { arr2.push(item) } })
发表于 2024-02-26 14:59:20 回复(0)