直接看代码:
<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>