Object特点:object实例有什么特性呢?大家都知道,每个object实例都可以有很多是属性和方法,每个属性都可以保存唯一的一个值。也就是属性和值是一一对应的关系,也就是key-和value(键值对)的关系,前面我们利用这个特性模拟了java中的Map。也就是object实例的属性(key)是唯一的,但是值(value)却是不唯一的。接下来的这个练习就利用了这个特性:object实例的属性具有唯一性的特点。
练习:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>去除数组重复项的练习</title>
<script type="text/javascript">
//在该练习中会定义若干个方法,如果大家对于js的方法的定义不熟悉,
//可以学完方法后在对此处的内容多加练习。
//不重复的只有1,2,3,4,5,6
let arr = [1,2,3,2,5,6,1,2,1,2,5,4,3,2];
//实现的思路:将数组的每个元素的值作为object实例的key,因为key的唯一性。实现了去重。
//也就是需要将数组转换为object对象,然后去重后,再转换为数组。
//定义方法,来实现将数组元素的key作为object实例的属性,保存到一个object实例中
//参数为一个数组
function arrayToObject(arr){
//定义局部的object对象
let obj = {};
//将数组的元素的值作为对象属性并赋值
for (let i=0 , j = arr.length ;i < j ;i++) {
obj[arr[i]] = true;
}
//返回对象
return obj;
}
//定义方法,实现将一个对象的属性,存入一个数组中。
//参数为一个object实例,返回一个新的数组
function keysToArray(obj){
//定义数组
let arr = [];
//遍历对象的属性,将属性添加到object对象中。
for(let attr in obj){
//如果attr是obj的属性
if(obj.hasOwnProperty(attr)){
//将attr压入数组。顶部添加
arr.push(attr);
}
}
//最后返回数组
return arr;
}
//实现方法,对指定的数组去重,返回一个新的数组
function unique(arr){
// let obj = arrayToObject(arr);
// let newArr = keysToArray(obj);
// return newArr;
//上面三行代码,可以写成一行
return keysToArray(arrayToObject(arr));
}
//测试。调用 方法,并打印
alert(unique(arr));//打印结果为:1,2,3,4,5,6
</script>
</head>
<body>
</body>
</html>
PS:笔者有大量的学习资料:java、python、大数据、人工智能、前端等。需要的小伙伴请加群:711408961
笔者的b站中有一些教学视频分享。感兴趣的小伙伴可以关注:https://space.bilibili.com/412362068