JS数据结构

## 数据结构
**数组**
##创建数组##
*1-1字面量创建数组*
let arr = [];
*1-2构造函数创建数组*
let arr = new Array();
注意的时,无论字面量形式创建的数组,还是构造函数创建的数组,当我们使用typeof来打印其数据类型的时候,都会返回一个objext。
*1-3数组赋值*
1·先声明再赋值

let arr = []; 
arr[0] = 1; 
arr[1] = 2; 
arr[2] = 3;

 

注意
  下标是从0开始的。
2·声明时直接赋值
let arr = [1,2,3,4,5];
*1-4访问数组元素*
  通过数组的下标来访问。
  通过使用变量的方式来访问。
*1-5删除元素*
  delete运算符来删除数组的某一个元素。
*1-6数组的遍历*
  1·通过for循环来遍历数组
示例:

let arr = [1, 2, 3, 4, 5]; 
for (let i=0;i<arr.length;i++) { 
console.log(arr[i]); 
} 
// 1 
// 2 
// 3 
// 4 
// 5

 

2·通过for-in来遍历数组:通过键找相应的数组元素
3·通过for-of来遍历数组:
示例:

let arr = [1, 2, 3, 4, 5]; 
for (let i of arr) { 
console.log(i); 
} 
// 1 
// 2 
// 3 
// 4 
// 5

4·通过forEach来遍历数组
5·使用迭代器来进行遍历:keys(),values(),entries()
  keys()是找到可迭代元素的键
  values()是找到可迭代元素的值
  entries() 是同时找打可迭代的元素的键和值。组成新的数组
*1-7解构数组*
  就是将一个复杂类型的数据分解成一个普通的类型数据。是ES6新添的功能
*1-8多维数组*
示例:

let a = ["Bill","Mary","Lucy"]; 
let b = [21,24,27];
let c = [a,b];// 这个c就是一个多维数组

访问多维数组里的数据:
示例:

let a = ["Bill","Mary","Lucy"];
let b = [21,24,27]; 
let c = [a,b]; 
console.log(c[0][2]);//Lucy

 

*1-9扩展运算符*
扩展运算符是ES6新添的运算符,用于取出可迭代对象的每一项。可以用来快速展开一个数组。写法:...变量名
示例:

let a = ["Bill","Mary","Lucy"]; 
let b = [21,24,27]; 
let c = [...a,...b]; 
console.log(c); //[ 'Bill', 'Mary', 'Lucy', 21, 24, 27 ]

 

## 数组的属性和方法
**2-1数组相关属性**

length:返回数组元素的个数。
示例:

let arr = [1,2,3,4,5]; 
console.log(arr.length);//5

 

利用此属性可以快速清空数组。
示例:

let arr = [1,2,3,4,5]; 
arr.length = 0;
console.log(arr);//[]

 

使用length属性可以随意对数组的长度进行操控。
示例:

let arr = [1,2,3,4,5];
arr.length = 3; 
console.log(arr);//[1,2,3]

 

**2-2数组相关方法**
1.添加删除方法:
  push():在数组的尾部推入(插入),
  pop():在数组的尾部弹出(删除)
  unshift():在数组的头部推入(插入)
  shift():在数组的头部弹出(删除)
推入的时候可以一次性推入多个元素,返回的是新的数组的长度。
弹出的时候一次只能弹出一个元素,返回的是弹出的那个元素。
2·操作方法:
concat():是先创建一个当前数字的副本,然后将接收到的参数添加到副本的末尾,最后返回新构建的数组,而原本的数组不会变化。
示例:

let arr = [1,2,3]; 
let arr2 = arr.concat("red","blue"); 
console.log(arr);//[ 1, 2, 3 ]
console.log(arr2);//[ 1, 2, 3, 'red', 'blue' ]

 

slice():可以接收一个或者两个参数,代表返回项的起始和结束的位置。
  一个参数:那就代表起始位置。返回从指定的起始位置到数组的末尾的所有项目。
  两个参数:那就代表从指定的起始位置到指定的末尾位置之间的项,但不包括结束位置的项目。
    注意:slice()方法不会影响原始数组
示例:

let arr = [1,2,3,4,5,6,7,8,9,10];
// 一个参数
let i = arr.slice(3); 
console.log(i);//[ 4, 5, 6, 7, 8, 9, 10 ] 
console.log(arr);//[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 
// 两个参数
let j = arr.slice(2,6); 
console.log(j);//[ 3, 4, 5, 6 ] 
console.log(arr);//[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]

 

如果传入的是负数,则用数组的长度加上该数来确定相应的位置。

splice():可以实现数组的3种类型的操作:删除,插入和替换
  删除:可以删除任意数量的元素,值需要指定2个参数:要参数的第一项位置和要删除的项数。
  插入:可以任意位置插入任意数量的元素,只需要提供3个参数:起始位置,要删除的项目(0),要插入的项目。
  替换:替换的原理在于插入的时候同时进行删除。
3·数组和字符串相互转换:join()和split()
  join():将数组转为字符串,可以传入分隔符作为参数。
  split():将字符串转为数组,传入参数指明以什么作为分隔符。
4·数组重排序方法
  两个方法:reverse()和sort()
reverse():反转数组项的顺序,注意使用该方法时会改变原来数组的顺序,而不是返回一个副本。
示例:

let arr = [1,2,3,4,5]; 
  console.log(arr.reverse());//[ 5, 4, 3, 2, 1 ] 
  console.log(arr);//[ 5, 4, 3, 2, 1 ]

 

sort():按照升序排列数组的每一项。
示例:

let arr = [0,12,3,7,-12,23]; 
  console.log(arr.sort()); 
  //[ -12, 0, 12, 23, 3, 7 ]

可以看到,我们调用sort()方法排序并没有正确的按照升序来进行排序。
原因子在于:sort()方法排序时首先会调用每一个元素的toString()转型方法,然后比较得到的字符串。即使每一项都是数值,sort()方法比较的也是字符串。
解决方法:sort()方法可以接收一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面。比较函数接收两个参数,如果第一参数应该位于第二个数的前面,返回一个负数,如果两个参数相等,返回0,如果第一个参数应该位于第二个数的后返回一个正数。
示例:

let arr = [0,12,3,7,-12,23]; 
  console.log(arr.sort(function(a,b){ 
    return a - b; 
    // 降序就返回 b - a 
  }));

 

5·位置方法:
indexOf()和lastIndexOf()
这两个方法都接收两个参数:要查找的项目和查找的起点位置索引。区别在于一个时从数组开头开始找,一个从数组末尾开始找。如果没有找到就返回-1.
includes()用于查看数组里面是否包含某个元素,包含返回true否则返回false
## 集合
**3-1创建集合**
直接使用new就可以创建一个Set对象,
**3-2给集合添加值**
使用add()可以给集合添加值,由于调用add()方法返回的又是一个Set对象,所以我们能连续调用add()方法进行值的添加,这种像链条一样的方式调用称之为链式调用。
示例:


let s1 = new Set();
s1.add(1); 
console.log(s1);//Set { 1 } 
s1.add(2).add(3).add(4); 
console.log(s1); //Set { 1, 2, 3, 4 }

 


**3-3集合相关属性和方法**
1·用size属性获取元素个数:
示例:


let s1 = new Set([1,2,3]);
console.log(s1.size);//3

2·使用has()方法来查看一个集合种是否半酣某个值
示例:

let s1 = new Set([1,2,3]); 
console.log(s1.has(1));//true
console.log(s1.has("1"));//false

 

3·删除集合值:
使用deldete删除Set对象里面的一个元素
示例:

let s1 = new Set([1,2,3]); 
s1.delete(2);
console.log(s1);//Set { 1, 3 } 
// 没有的元素也不会报错
s1.delete("2");
console.log(s1);//Set { 1, 3 }

 4·如果要一次性删除所有的元素,可以使用clear方法

let s1 = new Set([1,2,3]);
s1.clear()
console.log(s1);//Set {}

集合转数组

前面我们有提到过,Set对象里面是不能够存放相同的元素的,利用这个特性,我们可以快速的 为数组去重,

示例:

let arr = [1,2,2,3,4,3,1,6,7,3,5,7];
let s1 = new Set(arr);
let arr2 = [...s1]; console.log(arr2);//[ 1, 2, 3, 4, 6, 7, 5 ]

 



posted @ 2019-07-05 15:34  沐子李  阅读(805)  评论(0编辑  收藏  举报