1.Set():
(1)Set只存储value值,没有key,{value:value}
(2)Set
对象允许你存储任何类型的唯一值,利用set存储唯一值的特点,我们可以进行去重
将Set对象转换为数组
一.共同点:
1.都有entries()方法(给数组增加索引)
(1)-普通数组:
使用entries()要配合for循环才能拿到里面的索引和对应的值
var arr = [1,2,3];
console.log(arr.entries()) //Array Iterator {}
for(let n of arr.entries()){
console.log(n)
//(2) [0, 1]
(2) [1, 2]
(2) [2, 3]
}
(2)-set()
var set = new Set();
set.add(5);
set.add(1);
set.add(7);
console.log(set) //Set(3) {5, 1, 7}
var a = set.entries();
console.log(a) //SetIterator {5 => 5, 1 => 1, 7 => 7}
(3)-map()
使用entries()要配合next().value使用,执行一遍就显示一个,在执行一遍就显示下一个
var map = new Map();
map.set(3,'a');
map.set(5,'b');
map.set(1,'c');
console.log(map) //Map(3) {3 => 'a', 5 => 'b', 1 => 'c'}
console.log(map.entries().next().value) //[3, 'a']
(4)对象
*entries自己的用途:二维数组按行排序
function sortArr(arr) {
var goNext = true;
var entries = arr.entries();
while (goNext) {
var result = entries.next();
if (result.done !== true) {
result.value[1].sort((a, b) => a - b);
goNext = true;
} else {
goNext = false;
}
}
return arr;
}
var arr = [[1,34],[456,2,3,44,234],[4567,1,4,5,6],[34,78,23,1]];
sortArr(arr);
/*(4) [Array(2), Array(5), Array(5), Array(4)]
0:(2) [1, 34]
1:(5) [2, 3, 44, 234, 456]
2:(5) [1, 4, 5, 6, 4567]
3:(4) [1, 23, 34, 78]
length:4
__proto__:Array(0)
*/
二.set和map的区别
set是一种关联式容器,其特性如下:
- set以RBTree作为底层容器
- 所得元素的只有key没有value,value就是key
- 不允许出现键值重复
- 所有的元素都会被自动排序
- 不能通过迭代器来改变set的值,因为set的值就是键
map和set一样是关联式容器,它们的底层容器都是红黑树,区别就在于map的值不作为键,键和值是分开的。它的特性如下:
- map以RBTree作为底层容器
- 所有元素都是键+值存在
- 不允许键重复
- 所有元素是通过键进行自动排序的
- map的键是不能修改的,但是其键对应的值是可以修改的