参考 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<friuits.length;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<T> {
add(value: T): this;
clear(): void;
delete(value: T): boolean;
forEach(callbackfn: (value: T, value2: T, set: Set<T>) => 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<K, V> {
clear(): void;
delete(key: K): boolean;
forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => 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"