【Js数据结构——数组】

1. 数组

  • 存储一系列类型相同的值。

  • 但是,在JavaScript中可以不保存相同类型的值。

1.1 数组的创建和初始化

// 方式一
let arr = new Array();
let arr = new Array(7);
let arr = new Array('monday', 'tuesday');

// 方式二
let arr = [];
let arr = ['monday', 'tuesday']

1.2 添加元素

1.2.1 在数组末尾添加元素

  1. 去长度arr.length添加

    let arr = [1, 2, 3, 4, 5];
    arr[arr.length] = 6;
    
  2. push()

    let arr = [1, 2, 3, 4, 5];
    arr.push(7);
    

1.2.2 在数组开头插入元素

  1. 循环添加:

    let arr = [1, 2, 3, 4, 5];
    arr[arr.length] = 6;
    arr.push(7);
    
    // 头插:在原型上加入该方法
    Array.prototype.insertFirstPosition = function(value){
        for(let i = this.length; i > 0; i --){
            this[i] = this[i - 1];
        }
        this[0] = value;
    }
    
    arr.insertFirstPosition(0)
    console.log(arr);
    
  2. unshift()方法

    let arr = [1, 2, 3, 4, 5];
    arr.unshift(-1);
    console.log(arr);
    

1.3 删除元素

1.3.1 尾删

pop()方法

let arr = [1, 2, 3, 4, 5];
arr[arr.length] = 6;
arr.push(7);
arr.pop();
console.log(arr);

1.3.2 头删

  1. 自定义方法——循环删除

    • 注意BUG:

      for(let i = 0; i < arr.length; i ++){
          arr[i] = arr[i + 1];
          // NOTICE: arr[arr.length - 1] = arr[arr.length] = undefined
      }
      for(let i = 0; i < arr.length - 1; i ++){
          arr[i] = arr[i + 1];
          // NOTICE: arr[arr.length - 1] 值还在
      }
      
    • 正确办法:

      // 重新返回一个新数组
      Array.prototype.removeUndefined = function(arr){
          let newArr = [];
          for(let i = 0; i < arr.length; i ++){
              if(arr[i] != undefined){
                  newArr.push(arr[i])
              }
          }
          return newArr;
      }
      // 删除元素!
      Array.prototype.deleteFirstPostion = function(){
          for(let i = 0; i < this.length; i ++){
              this[i] = this[i + 1];
          }
          return this.removeUndefined(this)
      }
      
    // 完整示例
    let arr = [1, 2, 3, 4, 5];
    // insert
    arr[arr.length] = 6;
    arr.push(7);
    
    // 重新返回一个新数组
    Array.prototype.removeUndefined = function(arr){
        let newArr = [];
        for(let i = 0; i < arr.length; i ++){
            if(arr[i] != undefined){
                newArr.push(arr[i])
            }
        }
        return newArr;
    }
    Array.prototype.deleteFirstPostion = function(){
        for(let i = 0; i < this.length; i ++){
            this[i] = this[i + 1];
        }
        return this.removeUndefined(this)
    }
    // delete
    arr = arr.deleteFirstPostion()
    
  2. shift()

    arr.shift()
    

1.4 在任意位置删除或插入元素

1.4.1 splice(index, number, value)

// 从 index = 0开始,删除两个元素
arr.splice(0, 2);

// 从 index = 2开始,删除0个元素,插入3个元素
arr.splice(2, 0, 1, 2, 3);

1.4.2 delete

长度没有改变,值改为undefined

// arr[3] = undefined!!!
delete arr[3]
let arr = [1, 2, 3, 4, 5];
console.log(arr.length);
delete arr[0];
console.log(arr.length);

1.5 JavaScript 的数组方法

1.5.1 数组合并

arr1 = [1, 2, 3];
arr2 = [4, 5, 6];
let arrNew = arr.concat(arr1, arr2);

1.5.2 迭代器函数

  1. every()

    // 判断 arr 中的元素是不是都为偶数。
    let arr = [1, 2, 3, 4, 5, 6, 7];
    
    let value = arr.every(x => {
        return x % 2 == 0
    })
    console.log(value);
    
  2. some()

    // 判断 arr 中的元素是否含有偶数。
    let arr = [1, 2, 3, 4, 5, 6, 7];
    
    let value = arr.some(x => {
        return x % 2 == 0
    })
    console.log(value);
    
  3. forEach()

    let arr = [1, 2, 3, 4, 5, 6, 7];
    
    arr.forEach(x => {
        if(x % 2 == 0){
            x ++;
        }
        console.log(x);
    });
    
  4. map()

    let arr = [1, 2, 3, 4, 5, 6, 7];
    
    let value = arr.map(x => {
        return x % 2 == 0;
    })
    
    console.log(value); // false, true,false, true,false, true,false
    
  5. filter()

    let arr = [1, 2, 3, 4, 5, 6, 7];
    
    let value = arr.filter(x => {
        return x % 2 == 0;
    })
    
    console.log(value);  // 2, 4, 6
    
  6. reduce(preValue, currentValue[, index, array]) 返回一个被叠加到累加器的值。

    let arr = [1, 2, 3, 4, 5, 6, 7];
    
    let value = arr.reduce((preValue, currentValue, index, array) => {
        return preValue + currentValue
    })
    
    console.log(value);
    

1.6 ES6 和 数组的新功能

1.6.1 for...of...

let arr = [1, 2, 3, 4, 5, 6, 7];
for (const value of arr) {
    console.log(value);
}

1.6.2 @@iterator对象

let arr = [1, 2, 3, 4, 5, 6];

let iterator = arr[Symbol.iterator]();
console.log(iterator.next().value);
console.log(iterator.next().value);
console.log(iterator.next().value);
console.log(iterator.next().value);

1.6.3 entries() keys() values()

let arr = [1, 2, 3, 4, 5, 6];
let iterator = arr[Symbol.iterator]();
let entry = arr.entries();

for(let i = 0; i < arr.length; i ++){
    console.log(entry.next().value);
}
let keyValue = arr.keys();
for(let i = 0; i < arr.length; i ++){
    console.log(keyValue.next().value);
}
let keyValue = arr.values();
for(let i = 0; i < arr.length; i ++){
    console.log(keyValue.next().value);
}

1.6.4 Array.from()

// 复制数组
let arr = [1, 2, 3];
let newArr = Array.from(arr);

1.6.5 Array.of()

根据传入的参数创建一个新数组。

let arr = [1, 2, 3];
let newArr = Array.of(1, 2,  ...arr);

1.6.6 Array.fill()

用静态值填充数组。

// 会改变原数组
let arr = [1, 2, 3];
arr.fill(10);
console.log(arr);
// 创建一个数组并且值全为0
let ones = Array(5).fill(0);
console.log(ones);
let arr = [1, 2, 3, 4, 5, 6];
arr.fill(0, 3, 5);
console.log(arr); // [ 1, 2, 3, 0, 0, 6 ]

1.6.7 Array.copyWithin()

复制数组中的一系列元素到同一数组指定的起始位置。

let arr = [1, 2, 3, 4, 5, 6, 7, 8];

arr.copyWithin(0, 6);
console.log(arr); // 7, 8, 3, 4, 5, 6, 7, 8

arr.copyWithin(1, 3, 5);
console.log(arr); // 7, 4, 5, 4, 5, 6, 7, 8

1.6.8 排序元素 sort()

let arr = [1, 4, 2, 5, 11, 44, 121, 990];

function compare(a, b){
    if(a > b){
        return 1;
    }
    if(a < b){
        return -1;
    }
    if(a == b){
        return 0;
    }
}

arr.sort(compare);
console.log(arr);
// 简化
arr.sort((a, b) => a-b);

1.6.9 搜索

  • indexOf() 返回与参数匹配的第一个元素得索引。
  • lastIndexOf() 返回与参数匹配的最后一个元素得索引。
  • find() 返回满足条件的第一个值;没有返回undefined。
  • findIndex() 返回满足条件的第一个值得索引;没有返回-1。
  • includes() 判断是否存在某元素,true | false。

1.6.10 输出数组为字符串

  • toString()
  • join()
let arr = [1, 2, 4, 5, 6, 43, 55];
console.log(arr.join(''));// 124564355
console.log(arr.join('-'));// 1-2-4-5-6-43-55
console.log(arr.toString()); //1,2,4,5,6,43,55
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值