数据类型
基本:number null undefined string boolean symbol
复杂:object
数据结构
计算机存储、组织数据的一种方式
数组:把数据有序的集合在一起
数组中每一个值叫做 item 元素,每个元组在数组中都有唯一的位置,位置用数字表示叫下标 || 索引 index
创建数组
- 字面量:let arr = []
- 构造函数:let arr = new Array()
typeof arr // object
数组赋值
- arr[index] = value arr[0] = “zhangsan”;
- arr[tiem1,item2,item3,…]
数组长度
arr.length
查看(访问)数组元素
arr[index]
简单值和复杂值区别
简单值存储在栈区,值比值
复杂值存储在堆区,址比址
let arr1 = [1,2,3];
let arr2 = arr1;
arr2[0] = "heihei";
console.log(arr1); //heihei 2 3
console.log(arr2); //heihei 2 3
解构 es6
将复杂数据类型的值拆解成简单数据类型
保持 = 左右两边数据结构相同
let arr = [1,2,3];
let [a,b,c] = arr;
console.log(a,b,c);
//如果想跳过某个值
let [a, ,c] = arr;
console.log(a,c);
遍历数组
有()的叫方法,有[ ]叫属性
- for
let arr = ["a", "B",3,"zhangsan",true,undefined];
for(let i =0;i< arr.length;i++){
console.log(arr[i]);
}
//针对大量数据时的循环效率更高的写法
for(let i = 0, j = arr.length; i < j; i++){
console.log(arr[i]);
}
- for of (es6新增)
let arr = ["a", "B",3,"zhangsan",true,undefined];
for(let item of arr){
console.log(item);
}
- for in 用在遍历对象
let arr = ["a", "B",3,"zhangsan",true,undefined];
for (let index in arr){
console.log(index);
}
- forEach(callback回调函数)
let arr = ["a", "B",3,"zhangsan",true,undefined];
arr.forEach(function (item, index){
console.log(`第${index}位的是${item}`);
});
多维数组
数组里嵌套了数组 [ [ ] ] 一般就2维数组多,不会再深入
let arr = ["a", ["zhangsan", "lisi"], [1, 2, 3]];
console.log(arr[1] [0]); //zhangsan
数组的操作方法
- push( item1, item2…) 在数组末尾添加
- pop( ) 删除数组末尾
- shift( ) 删除数组首位
- unshift( ) 在数组首位添加
- slice(startIndex,endIndex) 截取,startIndex 开始截取到 endIndex -1
- splice( startIndex, deleteCount, item1, item2…) 新增 删除 修改(替换)
反转数组
arr.reverse()
let arr = ["a", "b", "c"];
let result = arr.reverse();
console.log(result); //"c","b","a"
console.log(arr); //"c","b","a"
排序数组
arr.sort()
let arr = [3,2,5,11,8];
arr.sort((a,b) => a - b); //升序
arr.sort((a,b) => b - a); //降序
连接数组
arr.concat()
let arr1 = ["a","b","c"];
let arr2 = [1,2,3];
let arr3 = arr1.concat(arr2);
console.log(arr3); //[`a`,`b`,`c`,1,2,3]
查找数组下标
arr.index0f(value) arr.lastIndex0f(value)
let arr = ["a","b","c","a"."b","c"];
console.log(arr.index0f("a")); //0
console.log(arr.lastIndex0f("a")); //3
console.log(arr.index0f("不存在的值")) //-1
数组转字符串
str.split(“分隔符”) 并且不包含该分隔符
let str = "helloworld";
let result = str.split("o");
console.log(result); //["hell","w","rld"]
let result = str.split("");
console.log(result); //["h","e","l","l","o","w","o","r","l","d]
字符串转数组
arr.join(“分隔符”)
let arr = ["a","b","c","A","B","C"];
let result = arr.join("-");
console.log(result); //a-b-c-A-B-C
查找数组内容
arr.includes(value) 返回Boolean
let arr = ["a","b","c","A","B","C"];
console.log(arr.includes("a")); //true
console.log(arr.includes("z")); //false
遍历操作产生新数组
arr.map(function(){…}) 遍历同时操作,返回新数组
let arr = [1,2,3];
let result = arr.map(function(item){
return item*2;
});
console.log(arr); //[1,2,3]
console.log(result); //[2,4,6]
过滤筛选数组
arr.filter(function(){…}) 返回条件为 true 的 item 不会留下undefined
let arr = [1,2,3,4,5,6];
let result = arr.filter(function(item){
return item % 2 == 0;
});
console.log(arr); //[1,2,3,4,5,6]
console.log(result); //[2,4,6]
-------面试题--------
let arr = [0,1,2];
arr[5] = 5; //[0,1,2,un,un,5]
let result = arr.filter(function(item){
return item == undefined;
});
console.log(result); //[] 返回条件为 true 的 item 不会留下undefined
判断数组中每个或一些元素是否满足条件
arr.every() arr.some() 返回Boolean
let arr = [1,2,3,4,5,6];
let result = arr.every(function(item){
return item % 2 == 0; //false
});
console.log(result);
let result = arr.some(function(item){
return item % 2 == 0;
});
console.log(result); //true
扩展运算符
let arr1 = ["a","b","c"];
let arr2 = [1,2,3];
let arr3 = [...arr1,...arr2];
console.log(arr3); //[`a`,`b`,`c`,1,2,3]
去重
new Set() ES6 新增数据结构
- set中查看数组长度的命令为 .size
- add(value) 不会包含重复的值,不做数据类型转换
- 链式调用
let s = new Set(arr);
console.log(s);
s.add(4).add(4).add(4).add("4"); //链式调用
arr = [...s];
console.log(arr); //返回去重后的数组
let tempArr = [];
for(let item of s){
tempArr.push(item);
}
console.log(tempArr); //返回去重后的数组
Map 映射
- 区别arr.map()
- let m = new Map () 与对象相似,键可以是任意数据类型