数组去重、排序、扁平化

数组去重、排序、扁平化

1. 数组去重

1-1 双层 for 循环

  • 定义一个新数组,并存放原数组的第一个元素
  • 遍历原始数组,将原始数组中的每个元素与新数组中的每个元素进行比对
  • 如果不重复则添加到新数组中,重复则不添加,最后返回新数组
// 双重for循环去重
// 通过原始数组与新数组中元素对比来去重
function unique(arr) {
   
    // 判断是否为数组
    if (!Array.isArray(arr)) {
   
        console.log('type error!')
        return
    }
	// 定义新数组 新数组第一个元素为元素数组第一个元素
	let newArr = [arr[0]]
	for (let i = 0; i < arr.length; i++) {
   
		console.log(arr[i])
		let repeat = false;
		for (let j = 0; j < newArr.length; j++) {
   
			console.log(newArr[j])
            // 判断如果元素相同则返回true然后继续迭代
			if (arr[i] === newArr[j]) {
   
				repeat = true;
				break;
			}
		}
        // repeat为false时 arr[i]与newArr[j]不相等时添加新元素
		if (!repeat) {
   
			console.log(newArr)
			newArr.push(arr[i])
			console.log(newArr)
		}
	}
    // 执行完返回新数组
	return newArr;
}

let arr = [1, 1, 2, 7, 7]
console.log(unique(arr))

1-2 indexOf 去重

数组的 indexOf() 方法可返回某个指定的元素在数组中首次出现的位置

  • 首先定义一个空数组 newArr,然后调用 indexOf 方法对原来的数组进行遍历判断
  • 如果元素不在新数组中,则将其 push 进新数组中,最后将新数组返回即可获得去重的数组
// 通过indexof获取元素首次出现的位置
function unique(arr) {
   
	// 判断是否为数组
	if (!Array.isArray(arr)) {
   
		console.log('type error!')
		return
	}
	// 定义新数组
	let newArr = [];
	for (let i = 0; i < arr.length; i++) {
   
		console.log(arr[i])
		console.log(newArr.indexOf(arr[i]) === -1)
		// 如果新数组有相同的元素则不添加
		if (newArr.indexOf(arr[i]) === -1) {
   
			newArr.push(arr[i])
			console.log(newArr)
		}
	}
	// 返回新数组
	return newArr
}
let arr = [4, 4, 5, 5, 7]
console.log(unique(arr))

1-3 includes方法

数组的 includes() 方法可判断数组中是否含有此元素

  • 首先定义一个空数组 newArr,然后调用 includes 方法对原来的数组进行遍历判断
  • 如果元素不在新数组中,则将其 push 进新数组中,最后将新数组返回即可获得去重的数组
// 通过includes判断数组是否含有此元素
function unique(arr) {
   
	// 判断是否为数组
	if (!Array.isArray(arr)) {
   
		console.log('type error!')
		return
	}
	// 定义新数组
	let newArr = [];
	for (let i = 0; i < arr.length; i++) {
   
		console.log(arr[i])
		console.log(newArr.indexOf(arr[i]) === -1)
		// 如果新数组有相同的元素则不添加
		if (!newArr.includes(arr[i])) {
   
			newArr.push(arr[i])
			console.log(newArr)
		}
	}
	// 返回新数组
	return newArr
}
let arr = [4, 4, 5, 5, 7]
console.log(unique(arr))

1-4 fileter + indexOf

利用 indexOf 检测元素在数组中第一次出现的位置是否和元素现在的位置相等,如果不等则说明该元素是重复元素

// filter 对数组进行迭代过滤
function unique(arr) {
   
	if (!Array.isArray(arr)) {
   
		console.log('type error!')
		return
	}
	// 通过Array原型方法返回一个新数组
	return Array.prototype.filter.call(arr, function(item, index) {
   
		// 判断如果当前元素不等于当前索引则为重复元素
		// 则返回索引与元素相符合的元素组成的新数组
		return arr.indexOf(item) === index;
	})
}
let arr = [2, 2, 4, 5, 7];
console.log(unique(arr));

1-5 相邻元素去重

  • 通过 sort() 方法先对数组进行排序,创建一个新数组
  • 然后根据排序后的结果进行遍历及相邻元素比对,如果相等则跳过该元素,不相等则添加到新数组
// 通过sort()对元素数组排序对相邻的元素进行对比
function unique(arr) {
   
	if (!Array.isArray(arr)) {
   
		console.log('type error!')
		return
	}
	arr = arr.sort();
	let newArr = [];
	for (let i = 0; i < arr.length; i++) {
   
		// 判断相邻的元素是否相同
		console.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值