前端手写: 数组去重

5 阅读1分钟

Set 去重

          // Set 去重  (ES6 新增的一种无序、唯一的集合数据结构)
		const arr1 = [1, 1, 2, 2, 3, 5];
		const arr1Set = [...new Set(arr1)];
		console.log('旧数组:', arr1)
		console.log('去重后数组:', arr1Set)

filter + indexOf 去重

		// filter + indexOf 去重
		   // filter 是数组方法,核心是按条件筛选元素,返回新数组,不修改原数组
			 // indexOf 查找指定元素在数组中首次出现的位置(索引)
		const arr2 = [1, 1, 2, 2, 3, 5];
		const arr2Filter = arr2.filter((item, index)=>{
			return arr2.indexOf(item) === index; 
		})
		console.log('旧数组:', arr2)
		console.log('去重后数组:',arr2Filter)

reduce 去重

		// reduce 去重
			// 数组.reduce((累计值, 当前元素, 当前索引, 原数组) => {
			//   累积逻辑,返回新的累计值
			// }, 初始值(可选));
	  const arr3 = [1, 1, 2, 2, 3, 5];
		const arr3Reduce = arr3.reduce((newArr, item) =>{
			if(newArr.indexOf(item) === -1) {
				newArr.push(item)
			}	 
			return newArr;
		}, [])
		console.log('旧数组:', arr3)
		console.log('去重后数组:',arr3Reduce)


Map 去重


		// Map 去重 键值对集合
		const arr4 = [1, 1, 2, 2, 3, 5];
		const map1= new Map();
		const arr4Map = arr4.filter((item,index) => {
			if(!map1.has(item)) {
				map1.set(item, true);
				return true;
			}
			return false;
		})

		console.log('旧数组:', arr4)
		console.log('去重后数组:',arr4Map)