数组的增/删/改概述,案例及解题思路

数组与对象

关于数组

  • 什么是数组?

    索引从0开始,并且存放相同结构的集合 是数组

  • 为什么有数组?(数组解决了什么问题,也是数组的作用?

    相同结构的数据 统一管理(处理)问题

  • 数组有什么特点

    1:由 索引和数组元素组成

    2:有序的 与长度(长度表示数组有多少个元素,每个都有自己的位置编号)
    3:数组元素可以为js任意类型的数据

  • 索引作用:查找元素

  • 长度的作用:记录数组有多少元素

数组的新增

  • var arr = [2, 3, 5, 7, 8];

    1.从arr尾部加 ‘dundun’

    arr[arr.length] = 'dundun'
    
  1. 从arr头部加 ‘xuerongrong’

方法1

   var arr_ = [];

   arr_[0] = 'xuerongrong';

   for (var i = 0, len = arr.length; i < len; i++) {

   var count = i + 1;

    //将数据新增到 arr_中

   arr_[count] = arr[i]

   }

思路:引进一个新数组,将新数组索引值为0的地方放上’xuerongrong’,引入一个变量count=i+1;也就是将原数组每一个索引往后移动一位后放进新数组.

 方法2:换值

      var arr = [2, 3, 5, 7, 8];

     for (var i = arr.length; i >= 0; i--) {
         arr[i] = arr[i - 1];
     }
     arr[0] = 'xuerongrong';
     console.log(arr);

思路:重点在于length的长度,长度刚好等于索引值+1,可以让索引值被赋值到后一位

3.在第三个位置 加’bingdundun’

    var val = 'bingdundun';
    var old = [arr[3], arr[4]];
    arr[3] = val;

    for (var i = 0; i < old.length; i++) {
        var count = 3 + i + 1;
        arr[count] = old[i]
    }
    console.log(arr);

扩展:封装成函数

  • 1.将一个字符串放在一个数组后面
var arr1 = [2, 2, 3, 4, 6, 1];
var str = 'bingdundun';
    function push(arr, name) {
        var arr_ = [];
        arr_[arr.length] = name;
        for (var i = 0; i < arr.length; i++) {
            arr_[i] = arr[i];
        }
        return arr_;
    }
    push(arr1, str);
思路:length的值刚好是比索引值大1位的,可以直接把最后面的这个位置让给将要加进来的新元素
      如果新加入的元素不止一个呢?或者是个数组怎么办呢?看下面的这种方法.
  • 2.将一个数组放在另个给数组后面
var arr1 = [2, 2, 3, 4, 6, 1];
    function push(arr, name) {
        var arr_ = [];
        // arr_[arr.length] = name;
        for (var i = 0; i < arr.length; i++) {
            arr_[i] = arr[i];
        }
        for (var j = 0; j < name.length; j++) {
            arr_[arr_.length] = name[j];
        }
        return arr_;
    }
    push(arr1, res);
思路:和上面的一种方法差不多,将函数封装起来,并且找一个形参(name)来接受实参,不一样的是刚才的实参是一个字符串,现在的实参是一个数组,只需要将新数组遍历一下,依次写进新新数组即可.
知识点:obj['a']在是一个静态的对象中放键
    obj[a]是给一个对象动态的赋值,一般用遍历的方法.

对象

对象的定义

  •   对象: 用于表示不同意义的数据
      对象: key - value 键值对
      key 键 value 值
      key 都是字符串 相当于变量
      value 任意类型的js数据
    
  • 循环读取所有key

    var keyArr = []
    var len = keyArr.length;
      for (var k in obj) {
          console.log(k);
          keyArr[len] = k;
          len++
      }
      console.log(keyArr);
    
  • 获取对象中的键

      function keys(obj) {
          var res = [];
          var len = res.length;
          for (var k in obj) {
              res[len] = k;
              len++
          }
          return res
      }
      var keysArr = keys(obj);
      console.log(keysArr);
    
  • 获取对象中的值

       function values() {
          var res = [];
          for (var k in obj) {
              var len = res.length;
              res[len] = obj[k];
          }
          return res
      }
      var obj_val = values(obj)
    

数组的增删改

    push() 从数组尾部新增元素
           参数:被新增的元素
    arr.push('dundun');//在后面加

    arr.unshift('xuerongrong');//加在最前面

    // arr.splice(index,count,addEL)//从哪里加;加几个;加的什么
    arr.splice(1, 1, 'aaa');

    concat() 数组合并
    var test = [1, 3, 4]
    arr = arr.concat(test)

    从头
    arr.shift()

    从尾
    arr.pop()

    从某一个位置删除几个元素
    arr.splice(1,1)

       arr.splice(1, 1, '更改数据')

查询

  var test = 'gaohangyang';
  var res = arr.indexOf(test);

测试题

1 将数组变为对象

输入 var arr = [‘name’,‘fanzhen’,age,12]

输出: {name:‘fanzhen’,age:12}

  • 方法1

      var arr = ['name', 'fanzhen', 'age', 12];
      var obj = {};
      var keys = []
       var vals = []
       for (var i = 0; i < arr.length; i++) {
          if (i % 2 === 0 || i== 0 ) {
              keys.push(arr[i])
          }else{
              vals.push(arr[i])
          }
      }
      for(var j = 0;j<keys.length;j++){ 
      obj[keys[j]]=vals[j] 
      }
           console.log(obj); 
    思路:声明一个空对象,一个存键的数组keys,一个存value值的数组vals ,
        将原数组中的索引值为偶数的拿出来存在keys中,
        将原数组中的索引值为奇数的拿出来存在vals中,
        最后将value值赋给keys,就可以将obj打印下来
    
  • 方法2.

      var arr = ['name', 'fanzhen', 'age', 12];
      var obj = {};
      for (var i = 0; i < arr.length; i++) {
          if (i == 0 || i % 2 == 0) {
              var key = arr[i];
          } else {
              obj[key] = arr[i];
          }
      }
      console.log(obj);
     思路:将索引值为偶数的的拿出来给key
         将索引值为奇数的拿出来直接赋值给obj[key]
         即可直接打印出所需要的对象
    

2: 过滤对象中为空字符的字段

输入:{name:’’,age:12}

输出:{age:12}

  • var obj = { name: '', age: 12 };
      for (var key in obj) {
          if (obj[key] == '') {
               delete obj[key];
          }
      }
      console.log(obj);
    
    方法2:
  • var obj = {
         name: '',
         age: 12,
         sex: '男'
     };
     var newobj = {}
     for (var key in obj) {
      if (obj[key] !== '') {
             newobj[key] = obj[key];
         }
           }
     obj = newobj;
     console.log(newobj);
     为什么最后已不是将newobj赋给obj???
    

3: 封装一个数组变对象的函数

  •   function objs(arr) {
          var obj = {};
          for (var i = 0; i < arr.length; i++) {
              if (i == 0 || i % 2 == 0) {
                  key = arr[i];
              } else {
                  obj[key] = arr[i];
              }
          }
          return obj;
      }
      var res = objs([2, 3, 5, 6, 4]);
      console.log(res);
    

4: 封装一个过滤对象中空字符的函数

  • function objs(arr) {
          var obj = arr;
          for (var key in obj) {
              if (obj[key] == '') {
                  delete obj[key];
              }
          }
          return obj;
      }
      var obj1 = {
          name: '',
          age: 12
      };
      var res = objs(obj1)
      console.log(res);
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值