您好,欢迎访问一九零五行业门户网

javascript的集合类型有哪些

集合类型有3种:1、map类型, map集合中存储的是键值对,键不能重复,值可以重复;2、set类型,set中存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序;3、list类型,list中存放的对象是有序,可重复的,其查询速度。
本教程操作环境:windows7系统、javascript1.8.5版、dell g3电脑。
javascript的集合类型有3种:set(集)、list(列表)和map(映射)。
1、map(键值对、键唯一、值不唯一) :
map是一组键值对的结构,具有极快的查找速度。通过传入数组的数组来建立。通过调用 .set(key,value) 来添加新的元素。
var m = new map([['michael', 95], ['bob', 75], ['tracy', 85]]);m.get('michael'); // 95m.set('adam', 67); // 添加新的key-value
举个例子,假设要根据同学的名字查找对应的成绩,如果用array实现,需要两个array:
var names = ['michael', 'bob', 'tracy'];var scores = [95, 75, 85];
给定一个名字,要查找对应的成绩,就先要在 names 中找到对应的位置,再从 scores 取出对应的成绩,array越长,耗时越长。
如果用map实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。
用 javascript 写一个 map 如下:
var m = new map([['michael', 95], ['bob', 75], ['tracy', 85]]);m.get('michael'); // 95
初始化 map 需要一个二维数组,或者直接初始化一个空 map。
map 具有以下方法:
var m = new map(); // 空mapm.set('adam', 67); // 添加新的key-valuem.set('bob', 59);m.has('adam'); // 是否存在key 'adam': truem.get('adam'); // 67m.delete('adam'); // 删除key 'adam'm.get('adam'); // undefined
由于一个 key 只能对应一个 value,所以,多次对一个 key 放入 value,后面的值会把前面的值冲掉:
var m = new map();m.set('adam', 67);m.set('adam', 88);m.get('adam'); // 88
1)属性和方法
定义:键/值对的集合。
语法:mapobj = new map()
备注:集合中的键和值可以是任何类型。如果使用现有密钥向集合添加值,则新值会替换旧值。
map 对象属性描述
构造函数 指定创建映射的函数
prototype — 原型 为映射返回对原型的引用
构造函数 返回映射中的元素数
map 对象方法描述
clear 从映射中移除所有元素
delete 从映射中移除指定的元素
foreach 对映射中的每个元素执行指定操作
get 返回映射中的指定元素
has 如果映射包含指定元素,则返回 true
tostring 返回映射的字符串表示形式
set 添加一个新建元素到映射
valueof 返回指定对象的原始值
// 如何将成员添加到 map,然后检索它们var m = new map();m.set(1, "black");m.set(2, "red");m.set("colors", 2);m.set({x:1}, 3);m.foreach(function (item, key, mapobj) { document.write(item.tostring() + "<br />");});document.write("<br />");document.write(m.get(2));// output:// black// red// 2// 3//// red
2、set(无序、不能重复):
set和map类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。
1)创建set
set 本身是一个构造函数,调用构造函数用来生成 set 数据结构。
关键词 标识符 = new set();

var s1 = new set(); // 空setvar s2 = new set([1, 2, 3]); // 含1, 2, 3
set 函数可以接受一个数组(或类似数组的对象)作为参数,用来进行数据初始化。
let i = new set([1, 2, 3, 4, 4]);//会得到set{1, 2, 3, 4,}
注:如果初始化时给的值有重复的,会自动去除。集合并没有字面量声明方式。
2)set的属性
常用的属性就一个:size 返回 set 实例的成员总数。
let s = new set([1, 2, 3]);console.log( s.size ); // 3
3)set的方法
set 实例的方法分为两大类:操作方法(用于数据操作)和遍历方法(用于遍历数据)。
操作方法:
add(value)添加数据,并返回新的 set 结构
delete(value) 删除数据,返回一个布尔值,表示是否删除成功
has(value)查看是否存在某个数据,返回一个布尔值
clear()清除所有数据,没有返回值
let set = new set([1, 2, 3, 4, 4]);// 添加数据 5let addset = set.add(5);console.log(addset); // set(5) {1, 2, 3, 4, 5}// 删除数据 4slet delset = set.delete(4);console.log(delset); // true// 查看是否存在数据 4let hasset = set.has(4);console.log(hasset); // false// 清除所有数据set.clear();console.log(set); // set(0) {}
遍历方法:
set 提供了三个遍历器生成函数和一个遍历方法。
keys() 返回一个键名的遍历器
values()  返回一个键值的遍历器
entries()  返回一个键值对的遍历器
foreach() 使用回调函数遍历每个成员
let color = new set(["red", "green", "blue"]);for(let item of color.keys()){ console.log(item);}// red// green// bluefor(let item of color.values()){ console.log(item);}// red// green// bluefor(let item of color.entries()){ console.log(item);}// ["red", "red"]// ["green", "green"]// ["blue", "blue"]color.foreach((item) => { console.log(item)})// red// green// blue
3、list(有序、可重复) :
列表是一组有序的数据,每个列表中的数据项称为元素。
list里存放的对象是有序的,同时也是可以重复的,list关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。
列表拥有描述元素位置的属性,列表有前有后(front和end)。
使用next()方法可以从当前元素移动到下一个元素,使用next() 可以从当前元素移动到下一个元素,使用prev()方法可以移动到当前元素的前一个元素,还可以使用moveto(n)方法直接移动到指定位置
1)list的方法:
定义的属性有:
listsize : 列表的元素个数
pos: 列表的当前位置
定义的方法有:
getelement(): 返回当前位置的元素
insert(): 在现有元素后插入新元素
append(): 在列表的尾部添加新元素
remove(): 从列表中删除元素
length(): 返回列表中元素的个数
clear(): 清空列表
contains(): 判断元素是否存在列表中
移动元素:
front(): 将列表的当前位置移动到第一个元素
end(): 将列表的当前位置移动到最后一个元素
prev(): 将当前位置后移一位
next(): 将当前位置前移一位
currpos(): 返回列表的当前位置
moveto(): 将当前位置移动到指定位置
2)list的实现
使用数组实现一个列表,并初始化属性值
function list() { this.listsize = 0; //记录列表元素的个数 this.pos = 0; //记录列表的位置 this.datastore = []; //存储列表元素}
append(element) 添加元素
给列表尾部添加新元素的方法与栈的压栈方法一样;
将记录元素个数的listsize加1,从而获取到存储元素的位置;再将元素添加到这个位置;
function append(element) { //让列表的长度加1,再将元素填充到新增的位置 this.datastore[this.listsize++] = element;}
find(element) 查找元素
首先遍历列表,如果要查找的元素存在列表中,则返回该元素的位置,未找到则返回-1
function find(element) { //遍历列表 for (let i = 0; i < this.datastore.length; ++i) { //判断列表中是否有该元素,存在则返回索引i if (this.datastore[i] == element) { return i; }; }; //不存在返回-1 return -1;};
remove(element) 删除元素
先调用find方法,查找元素的位置,如果存在返回true,不存在则会返回false;
如果存在,使用js数组操作方法splice删除当前元素,splice方法接收两个参数,即要删除的元素的索引和要删除的个数;
删除元素后,要将列表的长度减1;
function remove(element) { //调用定义的find方法查找元素 let fountat = this.find(element); //元素存在 if (fountat > -1) { //删除索引对应的值 this.datastore.splice(fountat, 1); //列表少了一个元素,减1 --this.listsize; //操作成功返回true return true; }; //找不到元素返回false return false;};
length() 查询列表中有多少元素
该方法返回列表中的元素,直接返回listsize的值
function length() { return this.listsize;}
insert(element, after) 向列表中插入元素
该方法是将目标元素插入到指定元素的后面,它接收两个参数,即目标元素element和指定元素after;
实现:先使用定义的find方法找到after的位置,然后使用splice方法在该位置的后一位插入目标元素;
splice方法传入三个参数,目标值的位置,要删除的数量,要插入的值(第二个参数为0表示删除0个,不删除元素);
操作成功返回true, 未找到指定元素则返回false
function insert(element, after) { let insertpos = this.find(after); if (insertpos > -1) { this.datastore.splice(insertpos + 1, 0, element); ++this.listsize; return true; }; return false;}
clear() 清空列表
删除列表,初始化数据
function clear() { delete this.datastore; this.datastore = []; this.listsize = 0; this.pos = 0;};
contains(element) 判断元素是否存在列表中
与find方法类似,也可直接使用find方法查找,找到返回true,不存在返回false
function contains(element) { for (let i = 0; i < this.datastore.length; ++i) { if (this.datastore[i] == element) { return true; }; }; return false;};
迭代器:移动列表中的元素
创建手动迭代列表的一些方法,可以不用关心数据的内部存储方法,以实现对列表的遍历。
//移动到最前面function front() { this.pos = 0;};//移动到最后面function end() { this.pos = this.listsize - 1;};//往后移一位function prev() { if (this.pos > 0) { --this.pos; };};//往前移一位function next() { if (this.pos < this.listsize-1) { ++this.pos; };};//返回列表当前的位置function currpos() { return this.pos;};//移动到指定的位置function moveto(position) { this.pos = position;};//返回当前元素的位置function getelement() { return this.datastore[this.pos];};
【相关推荐:javascript视频教程、web前端】
以上就是javascript的集合类型有哪些的详细内容。
其它类似信息

推荐信息