JavaScript 集合基本操作

足球世界杯规则

参考 MDN

集合

Array

1. 2种创建数组的方式

var fruits = [] ;

var friuits = new Array();

2. 遍历

fruits.forEach(function (item, index, array){

console.log(item, index);

});

// Apple 0

// Banana 1

for(var i in friuits){

console.log(friuits[i]);

}

for(var i=0;i

console.log(friuits[i]);

}

for(var value of friuits){

console.log(value);

}

3. 基本操作

操作

代码

说明

添加元素到数组的末尾

fruits.push('Orange')

返回数组长度

添加元素到数组的头部

fruits.unshift('Strawberry')

返回数组长度

删除头部元素

fruits.shift();

返回头部元素

删除尾部元素

fruits.pop();

返回尾部元素

找出某个元素在数组中的索引

fruits.indexOf('Banana');

返回下标

通过索引删除某个元素

fruits.splice(index, 1);

返回被删除的元素

复制数组

var shallowCopy = fruits.slice(0,length);

返回指定范围内元素组成的新数组

生成数组

Array.from()

返回Array.from() 方法从一个类似数组或可迭代对象中创建一个新的数组实例。

4. 根据索引删除元素的例子

/* splice(start: number, deleteCount: number, ...items: T[]): T[]; */

var fruits = ["apple","b","c","d"] ;

console.log("array is : ");

fruits.forEach(function (item, index, array){

console.log(item, index);

});

var index = fruits.indexOf("b");

fruits.splice(index,1);

console.log("array is : ");

fruits.forEach(function (item, index, array){

console.log(item, index);

});

5. Array.from()使用例子

var fruits = ["apple","b","c","d"] ;

var f = Array.from(fruits);

f.forEach(function (item, index, array){

console.log(item, index);

});

//apple 0

//b 1

//c 2

//d 3

var f = Array.from("hello");

f.forEach(function (item, index, array){

console.log(item, index);

});

//h

//e

//l

//l

//o

Array.from()还可以用于Set,Map

Set

1. 源码定义

interface Set {

add(value: T): this;

clear(): void;

delete(value: T): boolean;

forEach(callbackfn: (value: T, value2: T, set: Set) => void, thisArg?: any): void;

has(value: T): boolean;

readonly size: number;

}

2. 基本操作说明

操作

代码

说明

创建

new Set([iterable]);

可以放入数组,Set, Map来初始化

添加元素

set.add(5)

返回Set本身

删除元素

set.delete(5))

返回bool

判断是否有

set.has(5)

返回bool

长度

set.size

注意与数组长度区别,数组是length

清空

set.clear()

返回void

3. 遍历例子

let mySet = new Set([1,3,4,2,5]);

//遍历

for (let item of mySet) console.log(item);

for (let item of mySet.keys()) console.log(item);

for (let item of mySet.values()) console.log(item);

//三个遍历结果一样: 1 3 4 2 5

Map

1. 源码定义

interface Map {

clear(): void;

delete(key: K): boolean;

forEach(callbackfn: (value: V, key: K, map: Map) => void, thisArg?: any): void;

get(key: K): V | undefined;

has(key: K): boolean;

set(key: K, value: V): this;

readonly size: number;

}

2. 基本操作说明

操作

代码

说明

创建

var myMap = new Map();

添加

myMap.set(1,"hello")

返回map本身

获得

myMap.get(1)

返回对应的value

判断是否存在键

myMap.has(1)

返回bool

根据键删除

myMap.delete(1)

返回bool

3. 遍历

for (var key of myMap.keys()) {

console.log(key);

}

for (var value of myMap.values()) {

console.log(value);

}

for (var [key, value] of myMap) {

console.log(key + " = " + value);

}

for (var [key, value] of myMap.entries()) {

console.log(key + " = " + value);

}

myMap.forEach(function(value, key) {

console.log(key + " = " + value);

}, myMap)

4. 特殊说明

任何一个NaN 都不等于 NaN, 但是NaN可以作为Map的键,而且是唯一的。

undefined等于undefined ; 所有变量初始值都为undefined

var myMap = new Map();

myMap.set(NaN, "not a number");

console.log(myMap.get(NaN));

// "not a number"

var otherNaN = Number("foo");

console.log(myMap.get(otherNaN));

// "not a number"