数组中内置api
用途:处理复杂的数据结构。对象数组 字符串组合
难点:数据打乱重组
1: 对数据的基本操作;数组基本操作(增删改查) 对象基本操作 字符串基本操作(拼接 替换 删除 切割 截取…)
数组基本操作
1:查 --> 获取数组中的数据 arr[index] for…获取所有
-
获取第一个 arr[0]
-
获取最后一个 arr[arr.length-1]
-
获取倒数第二个 arr[arr.length-2]
2:增: -
从尾增加 改变原来数组 arr.push(增加数据可多个)
-
从头增加,索引值为0 改变原来数组 arr.unshift(增加数据可多个)
-
从尾部增。arr[arr.length] = 数据
-
合并数组 arr.concat() 返回新数组;原来数组arr 发生改变
3:删
- pop() 从尾部删除
- shift() 从头部删除
- delet arr[index] 删除值 不删除索引 长度不变
- splice(index,len) 从第几个索引值开始;删除几个。 返回删除内容
4: 改 arr.splice(index,len,data,data,…)
- splice() 删除 替换 插入
- index 表示 从第几个索引值开始
- len 表示 删除几个数据
- 第三参数以后 表示往index索引位置插入内容
5:字符串与数组转化方法
- 字符串变数组 str.split()
- 数组变字符串
- arr + ‘’
- arr.toString()
- arr.join() 将数组中数进行链接 参数为链接符,默认是逗号
6: 其他方法
- slice() 截取数组片段 返回截取内容;原来数组不变
- sort() 排序
- reverse() 应用 升序与降序的颠倒
展开运算符符 …
- 展开数组 […arr]
- …arr = 数组中每一个数据
- 展开对象 {…obj}
- …obj = key:value,key:value…
案例
求最大值、最小值:
思路:获取头和尾,将数组排序;
升序 头最小 尾最大; 降序 头最大 尾最小
//用sort() 方法
var arr = [3, 1, 44, 22, 33, 66, 2];
arr.sort(function(a, b) {
return a - b;
});
arr[0]; // 最小
arr[arr.length - 1]; // 最大
// 用for求最大值 最小值
//1: 初始化变量max 值 arr1[0]
// 2: 让max与数组中每一值进行比较, 如果发现有比max 大的值;对max 重新赋值
var arr1 = [3, 1, 44, 22, 33, 66, 2];
var max = arr1[0];
for(var i = 0;len = arr1.length,i<len;i++){
arr1[i] // 获取数组中每一个值
if(max<arr1[i]){
max = arr1[i]
}
}
console.log(max);
// 最小值
// 1:初始化变量 min 表示最小值
// 2:获取数组每一个值;让min 与 数组中每一个值进行比较。如果min大于该值,那么对min重新赋值
// 3:min 的值一定是小值
var min = arr1[0];
for(var i = 0;len = arr1.length,i<len;i++){
arr1[i] // 获取数组中每一个值
if(min>arr1[i]){
min = arr1[i]
}
}
降序
// 降序
var tmp;
for (var i = 0; i < arr1.length; i++) {
// arr1[i]// arr[i] 数组中前面数据
console.log(arr1[i]);
for (var j = i + 1; j < arr1.length; j++) {
// arr[j] 数组中后面的数
if (arr1[i] < arr1[j]) {
tmp = arr1[i]; // 保存小值
arr1[i] = arr1[j]; // 前面值变大
arr1[j] = tmp; // 后面值变小
}
}
}
console.log(arr1);
数组排序:
var arr1 = [3, 1, 44, 22, 33, 66, 2];
console.log(arr1);
数组排序 : for 换值 if 语句
升序思路
1:获取数组中每一个值。arr[i]
2:让arr[i]分别与i后面的值进行比较
3:声明一个变量;保存大值,让后让小值在前大值在后
var tmp ;
for(var i = 0;i<arr1.length;i++){
// arr1[i]// arr[i] 数组中前面数据
console.log((arr1[i]));
for(var j = i+1;j<arr1.length;j++){
/*
执行次数 6+5+4+3+2+1 +0
*/
// arr[j] 数组中后面的数
if(arr1[i]>arr1[j]){
tmp = arr1[i]; // 保存大值
arr1[i] = arr1[j] // 前面值变小
arr1[j] = tmp // 后面值变大
}
}
}
console.log(arr1)
数组去重
var arr = [1,1,2,2,2,2,3,3,4,54,3,1,2,3,5,5,5,5,"aaa","aaaa"];
方式一:
var res =[]; // 接受不重复的数据
// 1: 获取到arr中每一个值
for(var i =0;i<arr.length;i++){
var flag = true;// 表示不重复--true false 重复
// 与第一次获取到值;之前的数据进行比价,看是否有重复的
for(var j = 0;j<i;j++){
// 如果有重复的,跳出本次循环
if(arr[i]===arr[j]){
// 重复
flag = false;
break;// 循环次数少;性能更高
}
}
if(flag){ // flag 不会将重复数据;添加到 res中
res.push(arr[i])
}
}
console.log(res)
方式二:在原有的数据中进行该改变
for (var i = 0; i < arr.length; i++) {
arr[i];
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1);
j--;
}
}
}
console.log(arr);
// 方式三:
性能最好
var arr = [1,1, 2, 2, 2, 3, 3, 3, 4, 45, 55, 6, 6,1];
var res = []; // 声明的新数组
// 从后往前获取每一个数;让该数;与之前的所有数进行比较
for(var i = arr.length-1;i>=0;i--){
// 从后往前获取每一个数
var flag = true;
for(var j = i-1;j>=0;j--){
if(arr[i] ===arr[j]){
flag = false;
// 删除前面重复的数
arr.splice(j,1)
break
}
}
if(flag){
res.unshift(arr[i])
}
}
console.log(res)
方法四:
var arr = [1, 1, 2, 3, 3, 4, 4, 5];
var res = [];
// indexOf()返回数据的在数组中的索引值;如果为-1表示该数组中没有这个数据
// ---------> 参数为被【查询的数据】
for (var i = 0; i < arr.length; i++) {
// 判断res 中是否有 arr 中数据
// console.log(res.indexOf(arr[i]),arr[i])
if (res.indexOf(arr[i]) === -1) {
res.push(arr[i]);
}
}
// arr.indexof() 检索数组中书否有这个数据 -1无 有返回数据对应索引值
数组api遍历
var arr = [1, 2, 43, 5, 5, 6, 7, 78, 8, 8, 3];
// forEach() 遍历数组 实参 为函数
arr.forEach(function(data, i) {
// 参一data: 数组中数据
// 参二i : 索引值
console.log(i, ":", data);
});