JavaScript数据结构
定义:数据的存储,组织数据的方式
**构造函数:**处理对象的初始化,是一种特殊的成员函数,与其他函数不同,不需要用户来调用它,在建立对象时自动执行。
每建立一个对象,就调用一次构造函数;
构造函数没有返回值,因此也没有类型,作用只是对对象进行初始化;
构造函数不需要被用户调用,也不能被用户调用。
1.数组
!!!!JS没有多维数组!!!!
快速生成数组序列
-
for (i in […Array(5).keys()]){
console.log(Number(i))
}
let m=Array.from({length:100},(item, index)=> index+1);
console.log(m);
-
使用场景
-
数据存储
-
创建数组
-
方式一:字面量创建;
-
书写格式:
-
关键字 标识符 赋值符号 中括号 分号
-
如下:
let f68 = [ ] ;
-
-
-
方式二:构造函数创建;
- 关键字 标识符 赋值符号 new Array();
- let f68 = new Array();
-
-
使用方式:
-
数组名[下标]
-
注意:下标越界后js会自动创建空间,但是未赋值,故输出undefined
2.数组的属性和方法
1.方法
.include() 查询 返回True/False ES6;可以查找NaN
.indexOf() 从前往后查询,数组第一个值返回下标,没有找到返回:-1 全等匹配
.lastIndexOf() 从后往前找,返回最后一个下标,没有找到返回:-1
.push() 后增 Array.push() and Array.pop() 栈方法
.pop() 后删
.unshift() 前增 unshift()
的效率是较低的,整个数组要移动位置 Array.shift() and Array.unshift() 队列方法
.shift() 前删
.slice() 修改 ------------------切片
.splice(start, deleteCount, value, …) -------------------------------- 插入 !会修改原始数组!
* start:起始位置,deleteCount
:删除的个数,value
:插入的值
Array.some(): 如果数组中元素有一个元素符合条件,返回True ,都不满足则返回false;
Array.every(): 该数组所有元素是否满足条件,返回值为:T/False;
Array.filter(): 筛选过滤 —————返回满足条件的值。
Array.map(): map() 方法返回一个新数组,数组中的元素为原始数组元素**调用函数处理后!!!!**的值。
Arrary.from(): from() 方法用于通过拥有 length 属性的对象或可迭代的对象来返回一个数组。
Arrary.forEach(): 数组每个元素都执行一次回调函数。
2.属性
.length,对长度进行操作,原数组对应发生改变。默认从末尾开始删除,等于0时,清空数组。
3.解构
定义:允许你使用类似数组或对象字面量的语法将数组和对象的属性赋给各种变量
功能:是把复杂数据,分解成简单数据
要求:赋值符号左右的类型相同
[i,j]=[j,i]
3.遍历数组:
* for(let i ;i<list.length;i++)
* // for…of语句–遍历数组元素
for(let i of f68){console.log(i);}
* // for…in语句–遍历数组下标
for(let i in f68){console.log(i);}
4.判断标识符是否为数组
if(Array.isArray(f69)){}
if(f69 instanceof Array){}
5.数组排序
1.sort排序 (改变原数组)
console.log((list1.sort((a,b)=>b-a)));
2.冒泡排序与选择排序:
let list1=[13,25,36,52,81,65,97,64,62,1,1,5,68,24];
// 冒泡排序
// for (let i=1;i<list1.length;i++){
// for (let j=0;j<list1.length-i;j++){
// if (list1[j]>list1[j+1]){
// [list1[j],list1[j+1]]=[list1[j+1],list1[j]];
// }
// }
// }
// console.log(list1);
选择排序
for(let i=0;i<list1.length-1;i++){
for(let j=i+1;j<list1.length;j++){
if(list1[j]<[list1[i]]){
[list1[j],list1[i]]=[list1[i],list1[j]];
}
}
}
6.字符串转数组
1.分隔符split()
split(“”)每个字符单独分割,转换为数组;
split(“?”)以?为分割点,前后分割,舍弃标识,转换数组;
2.扩展运算符
**...**
栗子:
let list=[…str]
7.数组转字符串
1. .join();
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var energy = fruits.join();
'Banana,Orange,Apple,Mango'
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var energy = fruits.join('-');
console.log(energy);
Banana-Orange-Apple-Mango
括号内字符为连接字符
8.数组的拼接
1.concat
* 数组.concat(添加内容)
2.splice(数组1.length,0,…数组2);
3.遍历数组,push末尾添加
// for (let i of listl){
// listi.push(i);
// }
9.去重
let list=[…(new Set([…set1,…set2]))]
1.集合
特点:可以存储多个值,但不能重复。
1.属性:
1.set.size
集合长度
2.方法:
1.set.delete(元素); ---- 删除集合指定元素;
2.set.add(元素);-------添加元素到集合中;
3.for循环遍历;没有for ……in
4.console.log(‘value’,ff.values());//获取集合值;
console.log(‘keys’,ff.keys());//获取集合的键;
console.log(‘entries’,ff.entries());//获取集合的键值对;
5、 .has() ------ 查询集合有没有当前元素,返回T/F
3.功能
数组去重:
let a=[1,1,2,3,2,‘3’];
let b=new Set(a);//数组转集合
a=Array.from(b);// 集合转数组
console.log(a)
1.映射Map();
1.属性
2.方法
.has()- 查询
.delete(元素) 删除
.get() 获取值
.set() 设置值
1.JSON
1.JS转JSON
let str=JSON.stringify(f68);
2.JSON转JS
str=JSON.parse(str);