set
set是ES6的一种类对象数据结构,内部元素不能重复
生成set
let s = new Set()
let s = new Set([1, 2, 3, 4])
添加数据
s.add('hello')
s.add('goodbye')
s.add('hello').add('goodbye')
复制代码
Set 数据结构不允许数据重复,所以添加重复的数据是无效的
删除数据
// 删除指定数据
s.delete('hello') // true
// 删除全部数据
s.clear()
// 判断是否包含数据项,返回 true 或 false s.has('hello') // true
// 计算数据项总数 s.size // 2
//字符串去重
let str = "352255"; let unique = [...new Set(str)].join(""); // 352
// set去重
const arr = [1, 1, 1, 1, , 1, 1]
const delArr = new Set(arr) // 去重
// 合并去重
const arr2 = [1, 2, 3, 4]
const arr3 = [4, 5, 6, 1]
const delArr2 = new Set([...arr2, arr3])
// 交集
// 交集两个都有 取一个判断就OK
const arr4 = [8, 9, 10]
const arr5 = [11, 7, 9]
const set4 = new Set(arr4)
const set5 = new Set(arr5)
const mergeSet = arr4.filter(i => {
return set5.has(i)
})
// 差集
// 第一个有第二个没有 第二个有第一个没有
const arr1 = [1, 2, 3, 4]
const arr2 = [4, 5, 6, 7, 1, 1]
let arr3 = new Set(arr1.filter(item => !s2.has(item)))
let arr4 = new Set(arr2.filter(item => !s1.has(item)))
console.log(arr3)
console.log(arr4)
console.log([...arr3, ...arr4])
// set去重
const arr = [1, 1, 1, 1, , 1, 1]
const delArr = new Set(arr) // 去重
// 合并去重
const arr2 = [1, 2, 3, 4]
const arr3 = [4, 5, 6, 1]
const delArr2 = new Set([...arr2, arr3])
// 交集
// 交集两个都有 取一个判断就OK
const arr4 = [8, 9, 10]
const arr5 = [11, 7, 9]
let s1 = new Set(arr4)
let s2 = new Set(arr5)
let result = new Set(arr4.filter(item => s2.has(item)))
console.log(Array.from(result))
// 差集
// 第一个有第二个没有 第二个有第一个没有
const arr1 = [1, 2, 3, 4]
const arr2 = [4, 5, 6, 7, 1, 1]
let arr3 = new Set(arr1.filter(item => !s2.has(item)))
let arr4 = new Set(arr2.filter(item => !s1.has(item)))
console.log(arr3)
console.log(arr4)
console.log([...arr3, ...arr4])
map
生成map
let s = new Map()
//设置map的内值
s.set(1,'one').set(2,'two')
const map = new Map([[1,'one'],[2,'two']])
//console.log(map.get(1));
关于对Map对象输出数组的扩展操作
const map = new Map([[1,'one'],[2,'two']])
console.log(map.get(1));
console.log([...map.keys()]);// [1, 2]
console.log([...map.values()]);//['one', 'two']
console.log([...map]);//[[1, 'one'],[2,'two']]
//其中要对Map对象 进行数组的操作方式可以以以上方法转换再执行遍历
const map1 = new Map([[...map0].filter(([k,v]) => {return k < 3})])
//传参测试
let map2 = new Map([[...map0].filter(([k,v]) => {
console.log([k,v]);
return k < 3})])
//[1, 'a'],[2, 'b'],[3, 'c']
数组与Map的互相转换
数组转Map
let test = new Map([
[true, 7],
[{ foo: 3 }, ["abc"]],
]);
console.log(test);
Map转数组
const myMap = new Map().set(true,7).set({foo:3},['abc'])
console.log([...myMap])// [[true,7],[[foo,3],['abc]]]
Map转对象
当Map所有键都是字符串,可转为对象
const myMap = new Map().set('test',7).set('sasa',"sasasa")
let res = this.strMapToObj(myMap)
console.log(res )//{test: 7, sasa: 'sasasa'}
//方法
strMapToObj(strMap){
let obj = Object.create(null);
for (let [k,v] of strMap){
obj[k] = v
}
return obj
}
对象转Map
let obj = {yes:1,no:0}
let res = this.objToStrMap(obj)
console.log(res )//Map(2) {'yes' => 1, 'no' => 0}
///方法
objToStrMap(obj){
let strMap = new Map()
for (let k of Object.keys(obj)){
strMap.set(k,obj[k])
}
return strMap
}