数据结构基础

JavaScript数据结构基础学习

数组&集合

数组,高度灵活的数据结构,保存数据一般使用数组,如果强调排序和元素重复,必须使用数组
集合,仅在顺序无关紧要且要求值的唯一性时可用,与数组相比,可以简化数据访问(比如查找,删除)

数组

特点
  • 保留插入顺序
  • 通过索引访问元素,下标从0开始
  • 可遍历(for循环)
  • 大小(长度)可以动态调整
  • 允许重复元素
  • 删除和查找元素比较耗费性能

数组查找元素
find 查找到符合条件的项 返回true or false
findIndex 查找符合条件的项,返回下标,没找到返回-1

集合

const set = new set()
set.add(‘a’) // 在set对象尾部添加一个元素,返回该set对象
set.has(‘a’) // set中是否存在’a’ ,返回true or false
set.delete(value) // 删除指定元素,返回true or false
set.foreach(callback[,thisArg]) //按照插入顺序,为set对象中的每一个值调用一次callback,回调中的this可以指定thisArg
set.clear() // 清除set对象内所有元素,没有返回值
set.entries() // 返回一个新的迭代器对象,包含Set对象中的按插入顺序排列的所有元素的值的[value, value]数组。每个值的键和值相等。
set.keys() // 返回一个新的迭代器对象,包含set对象中按插入顺序排列的所有元素的值
set.values() // 返回一个新的迭代器对象,包含set对象中按插入顺序排列的所有元素的值

    const set = new Set()
    set.add('header')
    set.add('container')
    set.add('footer')

    const setIter = set.entries()
    setIter.next().value = > ['header','header']  
    setIter.next().done => false

    setIter.next().value => ['container','container']
    setIter.next().done => false

    setIter.next().value => ['footer','footer']
    setIter.next().done = > false

    set.next().value  => undefined
    set.next().done => true
特点
  • 集合是无序的(存储和读取的顺序可能不一样),不能通过索引值访问想要的值
  • 通过方法访问和获取元素
  • 可遍历(for in , for of , forEach)
  • 大小(长度)可动态调整长度
  • 值的唯一性,不允许重复。重复add 也不会新增集合元素
  • 删除和查找元素简单快捷,可以通过方法快速查找和删除元素不需要遍历
  • 可以添加任意类型的数据项

对象&映射

对象,非常通用的构造和数据存储结构,如果添加额外的功能则必须使用,函数里可以获取当前对象的的值(this.xxx)
映射,专注于数据存储,与对象相比,可以简化数据访问

对象

  • 无序的键值对数据
  • 通过键(属性)访问元素
  • 不可遍历(除了for-in循环)
  • 键是唯一的,值不是
  • 键必须是字符串,数字或符号
  • 可以存储数据和“函数”(作为方法)

映射

  • 有序的键值对数据
  • 通过键访问元素
  • 可遍历(使用for循环)
  • 键是唯一的,值不是
  • 键可以是各种类型的值(包括对象、数组)
  • 纯数据存储,针对数据访问进行了优化

let map = new Map()
map.set(‘name’,‘summer’)
map.set(true,true)
map.get(‘name’) => ‘summer’
map.entries() => 返回一个新的Map包含 [key, value] 迭代器对象
map.keys() => 按插入顺序返回所有的名组成的迭代器
map.values() 方法返回一个新的按顺序插入map对象中每个元素的value值组成的迭代器对象
map.forEach(callback[,thisArg]) thisArg 可选,执行callback时其this的值
map.size 属性值返回Map对象的元素数量

	var myMap = new Map();
	myMap.set('0', 'foo');
	myMap.set(1, 'bar');
	myMap.set({}, 'baz');
	//keys()
	var mapKeyIter = myMap.keys();
	
    mapKeyIter.next().value. => "0"
    mapKeyIter.next().value = > 1
    mapKeyIter.next().value => {}
    
    //entries()
	var mapIter = myMap.entries();
	
	console.log(mapIter.next().value); // ["0", "foo"]
	console.log(mapIter.next().value); // [1, "bar"]
	console.log(mapIter.next().value); // [Object, "baz"]

	// values()
	var mapValIter = myMap.values()
	mapValIter.next().value => 'foo'
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值