05(补)js数组操作

数组(Array)是一个有序的集合,用逗号隔开的每一个值就是一个元素、
每一个元素都有自己的位置,叫下标也叫索引(0~n),读取数组可以通过下标
数组有一个内置的属性 length,属性值存在的是数组的元素个数(长度)

for(var i =0 ; i < array.length ; i++){
   console.log("这是第"i"个数组:"li[i]);
   //依次打印出来数组的下标及每个数组元素
}


给数组最后一位添加一个数字array[array.length] = "需要添加的数值"
数组循环 for in 循环

for(var key in arr){
   console.log(arr[key]);
   //依次输出数组arr的每一个元素
}


多维数组:array[2][2]三行三列

array = [['1','2','3'],
         ['1','2','3'],
         ['1','2','3']]


push()
作用:在一个数组的末尾追加元素
参数:追加的元素
返回值:追加数组的长度
是否改变原数组:是
   

 var colors = ['red', 'pink'];
    var res = colors.push('blue');
    // 原数组
    console.log(colors);//['red', 'pink', 'blue']
    // 返回值
    console.log(res);//


pop()
作用:删除末尾的最后一个
参数:没有
返回值:被删除的元素
是否改变原数组:是
 

 var colors = ['red', 'pink'];
   var res = colors.pop();
   // 原数组
   console.log(colors);//['red']
   // 返回值
   console.log(res);//pink



shift()
作用:删除数组的第一项
参数:没有
返回值:被删除的元素
是否改变原数组:是
 

 var colors = ['red', 'pink'];
   var res = colors.shift();
   // 原数组
   console.log(colors);//['pink']
   // 返回值
   console.log(res);//red


unshift()
作用:在数组前面追加元素
参数:追加的东西
返回值:追加数组的长度
是否改变原数组:是
 

  var colors = ['red', 'pink'];
   var res = colors.unshift('blue', 'green');
   // 原数组
   console.log(colors);//['blue', 'green', 'red', 'pink']
   // 返回值
   console.log(res);//


reverse()
作用:把数组的每一项翻转
参数:没有
返回值:一个新数组
是否改变原数组:是
   

var ary=[1,2,3];
   var res=ary.reverse();
   console.log(res);//[3,2,1];
   console.log(ary);//[3,2,1];


sort()
作用:排序
参数:没有
返回值:一个新数组(排完后)
是否改变原数组:是
如果没有传参数,只能对 10 以内的数进行排序
需要在 sort()括号内传入一个函数(回调函数)进行判断排序

 var oldAry = [3, 1, 5, 11, 20];
 var returnValue = oldAry.sort((a,b)=>a-b)
 console.log(oldAry, returnValue);


splice()
作用:怎删改一体化
参数:多个
返回值:删除的元素(返回值是一个数组)
是否改变原数组:是
删除必须要有 2 个参数
第一个参数 表示你要开始删除的下标
第二个参数 表示你要删除的个数
 

 var nums = [1, 2, 3, 4, 5, 6];
   var res = nums.splice(0, 2);
   console.log(nums);// [3, 4, 5, 6]
   console.log(res);// [1,2]


增加需要传递三个参数
第一个参数 表示你要开始删除的下标
第二个参数 表示你要删除的个数
第三个参数 表示你要新增的元素
   

var nums = [1, 2, 3, 4, 5, 6];
   var res = nums.splice(3, 0, 7, 8, 9);
   console.log(nums);//[1, 2, 3, 7, 8, 9, 4, 5, 6] 
   console.log(res);// []


修改需要传递三个参数
修改也需要传递 3 个参数
第一个参数:开始的位置
第二个参数:要删除的元素数量
第三个参数: 要插入的元素(任意个)
 

 var nums = [1, 2, 3, 4, 5, 6];
   var res = nums.splice(0, 3, 7, 8, 9);
   console.log(nums);//[7, 8, 9, 4, 5, 6] 
   console.log(res);// [1, 2, 3]


slice()
作用:截取你选中的特定的内容
参数:1 个或者 2 个
返回值:截取的数组
是否改变原数组:否
如果不传参数或者参数只有一个(0),表示将原数组复制一遍

如果只传入一个参数,slice()会返回该索引到数组末尾的所有元素
 

 var nums = [1, 2, 3, 4, 5, 6];
   var res = nums.slice(1);
   console.log(nums);//[1, 2, 3, 4, 5, 6]
   console.log(res);// [2, 3, 4, 5, 6]


2.  如果有两个参数,slice()返回从开始索引到结束索引对应的所有元素
    > 两个参数 表示开始下标到结束下标,包含开始,不包含结束
    > 如果开始的位置大于结束的位置,返回值是空数组没有返回值

   var nums = [1, 2, 3, 4, 5, 6];
   var res = nums.slice(1, 5);
   console.log(nums);//[1, 2, 3, 4, 5, 6]
   console.log(res);// [2, 3, 4, 5]


concat()

作用:实现多个数组或者值得凭借
参数:数组或者值
返回值:返回值是拼接后的新数组
是否改变原数组:否
 

 var ary1 = [1, 2, 3];
   var ary2 = [4, 5, 6];
   var res = ary1.concat(ary2, "学校", "同学");
   console.log(ary1);//[1, 2, 3]
   console.log(res);//[1, 2, 3, 4, 5, 6, '学校', '同学']


toString()

作用:把数组转化成字符串
参数:没有
返回值:字符串
是否改变原数组:否
   

var ary1 = [1, { a: 1 }, null, undefined, 3];
   var res = ary1.toString();
   console.log(ary1);//[1, {a:1},null, undefined, 3]
   console.log(res)//1,[object Object]


join()

作用:用指定的字符凭借数组
参数:字符
返回值:拼接完的字符串
是否改变原数组:否
 

  var ary1 = [1, 2, undefined, 3, { a: 1 }];
   var res = ary1.join("|");
   console.log(ary1);//[1, 2, undefined, 3, { a: 1 }]
   console.log(res)// 1|2||3|[object Object]
   eval(res) //==> eval  执行计算


includes()

作用:检测数组中是否包含某一项
参数:具体项
返回值:布尔值
是否改变原数组:否
2022 年 3 月 22 日
indexOf/lastIndexOf
作用:获取某项在数组中(首次出现/最后出现的) 索引(也可以用来是否包含某项)
参数:(n,m)
返回值:-1 或者具体的索引值
是否改变原数组:否
indexOf(第一次出现)
第一个参数 你要检索的项
第二个参数 从哪里开始检索
 

 var ary = [1,2,3,1,1,2,3];
   var returnVlue = ary.indexOf(1,2);
   console.log(returnVlue,ary);//3,原数组


lastIndexOf(最后一次出现的位置)
第一个参数 你要检测的项
第二个参数 到那个位置结束检索
 

 var ary = [1,2,3,1,1,2,3];
   var returnVlue = ary.lastIndexOf(1,2);
   console.log(returnVlue,ary);//4,原数组


数组的迭代方法
forEach 遍历数组
括号中传入函数,函数由三个形参,第一形参是数组的每一项的数据,第二项是数组下标,第三项是原数组

   var ary = [1,2,3,1,1,2,3];
   ary.forEach(function(item,value){
         console.log(item,value);
     })


map 遍历数组方法
和 forEach 使用方法相同,但是它有返回值,它映射了一个新数组,内容里面要写 return
 

 var ary = [1,2,3,1,1,2,3];
   var res = ary.map(function(item,value){
         return item + 1;
     })
     console.log(res)
     //[2,3,4,2,2,3,4]


算法值数组去重
数组去重会出现下标塌陷问题

   

  var ary = [1, 2, 3, 1, 1, 2, 3];
     for (var i = 0; i < ary.length - 1; i++) {
         for (var j = i + 1; j < ary.length; j++) {
             if (ary[i] == ary[j]) {
                 ary.splice(j, 1);
                 j--;
                 //解决下标塌陷问题,删除重复数组后将下标前移
             }
         }
     }
     console.log(ary);


       

 var ary = [1, 2, 3, 43, 2, 1, 2, 3, 4, 11, 1, 1, 1, 1, 1, 1];
     var obj = {};
     for (var i = 0; i < ary.length; i++) {
         var key = ary[i];
         if (typeof obj[key] == "undefined") {
             obj[key] = ary[i];
         } else {
             ary.splice(i, 1);
             i--;
         }
     }
     console.log(ary);


   

 var ary = [1, 2, 3, 43, 2, 1, 2, 3, 4,11,1,1,1,1,1,1];
     var obj = {};
     var ary1 = [];
     for (var i = 0; i < ary.length; i++) {
         var key = ary[i];
             obj[key] = ary[i];
      //对象的属性名不能重复的特性
     }
     for(var i in obj){
         ary1.push(obj[i]);
     }
     console.log(ary1);


       

 var ary = [1,2,3,4,2,1,3,4,5,6];
     var newAry = [];
     for(var i in ary){
         var item = ary[i];
         if(newAry.indexOf(item) == -1){
             newAry.push(ary[i]);
         }
     }
     console.log(newAry);


算法值冒泡排序

var ray = [1, 4, 3, 2, 6, 5, 7];
var npm;
for (var i = 0; i < ray.length - 1; i++) {
   for (var j = 0; j < ray.length - 1 - i; j++){
      if(ray[j] > ray[j+1]){
          npm = ray[i];
          ray[i] = ray[j];
          ray[j] = npm;
      }
   }
}
console.log(ray);


递归
     

function total(num) {
          if (num > 100) return 0;
          return num + total(num + 1);
      }
      console.log(total(1));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值