算法

算法 - 集合

2021-03-03  本文已影响0人  羽晞yose

集合

// 去重
const arr = [1, 1, 2, 2]
const arr2 = [...new Set(arr)] // [ 1, 2 ], 或者使用Array.from

// 判断元素是否在集合中
const set = new Set(arr)
const has = set.has(1) // true

// 求交集
const set2 = new Set([2, 3])
const set3 = new Set([...set].filter(item => set2.has(item))) // { 2 }

两个数组的交集

leeCode第349题

const intersection = function(nums1, nums2) {
    return Array.from(new Set(nums1)).filter(item => arr2.includes(item))
};

const arr1 = [1,2,2,1] // [4,9,5]
const arr2 = [1,2] // [9,4,9,8,4]
const res = intersection(arr1, arr2)
console.log(res)

前端与集合:使用ES6的Set

// add
let set = new Set()
set.add(1)
set.add(1)
set.add(5)
set.add('some text')
const obj = {a: 1, b: '2'}
set.add(obj)
set.add({a: 1, b: '2'})

console.log(set) // Set { 1, 5, 'some text', { a: 1, b: '2' } }

// has
set.has(obj) // true

// delete
set.delete(5)
console.log(set) // Set { 1, 'some text', { a: 1, b: '2' }, { a: 1, b: '2' } }

console.log(set.size) // 4

for(let item of set.keys()) console.log(item) // 1, 'some text', { a: 1, b: '2' }, { a: 1, b: '2' }
for(let item of set.values()) console.log(item) // 1, 'some text', { a: 1, b: '2' }, { a: 1, b: '2' }
for(let [key, value] of set.entries()) console.log(key, value) // 懒得贴了,结果肯定是上面的双倍输出

// 转数组
const toArray = Array.from(set)
const toArray2 = [...set]

// 交集与差集
const set2 = new Set([1, 2, 3, 4])
const intersection = new Set([...set].filter(item => set2.has(item)))
const difference = new Set([...set].filter(item => !set2.has(item)))
console.log({'交集': intersection, '差集': difference})
上一篇下一篇

猜你喜欢

热点阅读