js数组内对象去重(多种方法)

直接看代码:

   <script type="text/javascript">
		var arr = [{
			key: '01',
			value: '西施'
		}, {
			key: '02',
			value: '王昭君'
		}, {
			key: '03',
			value: '杨玉环'
		}, {
			key: '04',
			value: '貂蝉'
		}, {
			key: '01',
			value: '西施'
		}, {
			key: '01',
			value: '西施'
		}];
		// 第一种方法 (利用对象访问属性的方法,判断对象中是否存在key)
		var new_arr1 = []
		var obj1 = {}
		for (var i = 0; i < arr.length; i++) {
			if (!obj1[arr[i].key]) {
				new_arr1.push(arr[i])
				obj1[arr[i].key] = true // 用来判断此对象已加入新数组
			}
			// console.log(obj1)
		}
		console.log(new_arr1)

		// 第二种方法 (利用两层for循环和布尔值的方法进行去重)
		var new_arr2 = []
		for (var i = 0; i < arr.length; i++) {
			var flag = true
			for (var j = 0; j < new_arr2.length; j++) {
				if (new_arr2[j].key == arr[i].key) {
					flag = false
				}
			}
			if (flag) {
				new_arr2.push(arr[i])
			}
		}
		console.log(new_arr2)

		// 第三种方法 (利用两层for循环和splice的方法进行去重,此方法会更改数组的原始数据)
		var new_arr3 = arr
		for (var i = 0; i < new_arr3.length; i++) {
			for (var j = i + 1; j < new_arr3.length; j++) {
				if (new_arr3[i].key === new_arr3[j].key) {
					new_arr3.splice(j, 1);
					j = j - 1;
				}
			}
		}
		console.log(new_arr3)

		// 第四种方法 (利用reduce方法遍历数组(ie9以下不支持此方法))
		// reduce 求数组项之和  求数组项最大值  数组去重 功能强大
		// prev 表示上一次调用回调时的返回值,或者初始值 [];
		// curr 表示当前正在处理的数组元素;
		
		// reduce 详解
		// arr.reduce(function(prev,cur,index,arr){
		// ...
		// }, init);
		// 或者
		// arr.reduce(function(prev,cur,index,arr){
		// ...
		// },);
		// arr 表示将要原数组;
		// prev 表示上一次调用回调时的返回值,或者初始值 init;
		// cur 表示当前正在处理的数组元素;
		// index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1;
		// init 表示初始值。
		
		// 常用的参数只有两个:prev 和 cur。
		
		var new_arr4 = arr
		var obj4 = {};
		new_arr4 = new_arr4.reduce((prev, curr)=>{
		    // obj4[curr.key] = true语句用于给对象obj4添加一个属性,该属性的名称是curr.key的值,属性的值是布尔值true
			obj4[curr.key] ? '' : obj4[curr.key] = true && prev.push(curr);
			return prev;
		}, []);
		console.log(new_arr4,obj4);
		// console.log(obj4)打印结果为{01: 1, 02: 2, 03: 3, 04: 4}。这意味着在代码执行过程中,obj4对象已经被成功填充了四个属性
	</script>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值