>首页> IT >

javascript的集合类型有哪些

时间:2022-04-11 11:18:14       来源:PHP中文网

本教程操作环境: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() + "
");});document.write("
");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) 添加元素

function append(element) {    //让列表的长度加1,再将元素填充到新增的位置    this.dataStore[this.listSize++] = element;}

find(element) 查找元素

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) 删除元素

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() 查询列表中有多少元素

function length() {    return this.listSize;}

insert(element, after) 向列表中插入元素

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) 判断元素是否存在列表中

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的集合类型有哪些的详细内容,更多请关注php中文网其它相关文章!

关键词: 当前位置 是否存在 构造函数