JavaScript 数组挖掘

splice与slice实现数组的增删改查

let arr = [1, 2, 3, 4];
console.log(arr.slice(1, 3)); //从第一个开始截到3 得到的就是一个2 和 3 不会改变原数组
console.log(arr.slice(0, 3)); //从0开始截到3 得到的就是一个1 和 2 和 3 不会改变原数组
console.log(arr.slice());  //如果不穿参数 得到的是整个数组
console.log(arr);
let arr = [1, 2, 3, 4];
// console.log(arr.splice(1, 2)); //从数组下标1开始 截取1后面2个 返回截取的数组[2, 3] 会改变原数组
// console.log(arr); //[1, 4]
let hd = arr.splice(1, 2, '123'); //从数组下标1开始  截取1后面的2个 再从1后面增加一个123 会改变原数组
// console.log(arr); //[1, '123', 4]

数据出栈与入栈及填充操作

let arr = [1, 2, 3];
// let hd = arr.pop(); //删除最后一个 返回删除的数字 改变原数组
// let hd = arr.unshift(0); // 往数组前面增加一个 返回增加的数组 改变原数组
// let hd = arr.shift(); //删除数组中第一个 返回 删除的值 改变原数组
let hd = arr.push(0); //往数组后面增加一个 返回增加的数组 改变原数组

解构赋值 可以理解为把结构里面的值批量赋值给变量

    //数组解构赋值
    let arr = ['孙悟空', '猪八戒'];
    let [swk, zbj] = arr;
    console.log(swk); //孙悟空
    console.log(zbj); //猪八戒
    //对象解构赋值
    let obj = {name: '孙悟空', age: '1000'};
    let {name, age} = obj;
    console.log(name); //孙悟空
    console.log(age); //1000
let [, arr] = ['name1', 'name2']
console.log(arr); //name2
let [arr, ...arrAll] = ['name1', 'name2', 'name3', 'name4']
console.log(arr); //name1
console.log(arrAll); //['name2', 'name3', 'name4'

展开运算符 展开放在变量位置 是把内容全部吸过来 放在值的位置 就表示 全部展开

  //一般拼接数组方法
    let arr = [1, 2, 3];
    let hd = [4, 5, 6];
    for (let item of hd) {
        arr.push(item);
    }
    console.log(arr); //[1, 2, 3, 4, 5, 6]
//展开符拼接数组
 let arr = [1, 2, 3];
 let hd = [4, 5, 6];
 arr = [...arr, ...hd];
 console.log(arr); //[1, 2, 3, 4, 5, 6]
   //函数展开语法 当函数参数不确定时候 可以用展开语法接受参数
    function show(...args) {
        console.log(args); //[1, 2, 3, 4] 返回的是一个数组
    }
    console.log(show(1, 2, 3, 4));

数组的拆分与合并

    let arr = '孙悟空, 猪八戒';
    let hd = arr.split(','); //以逗号形式拆分 字符串 并返回一个数组;
    console.log(hd); // ["孙悟空", " 猪八戒"]
    console.log(hd.join(',')) //孙悟空, 猪八戒 (以逗号的形式 合并 返回字符串)

查找元素的基本操作

es5 之前查找元素 indexOf() 从左侧查找数组 返回查找数组的索引值,如果数组中不包含查找的数字 返回-1

 let arr = [1, 2 , 3 , 2];
 console.log(arr.indexOf(2)) // 1(返回arr数组中2的位置)
 console.log(arr.indexOf(-2)) // -1 (数组中没有-2这个值)
 console.log(arr.indexOf(2, 2)) // 3 (参数1:查找2   参数2:从数组第二个开始查找)

lastIndexOf()从右侧查找数组 返回查找数组的索引值,如果数组中不包含查找的数字 返回-1

 let arr = [1, 2 , 4, 5, 3 , 2];
 console.log(arr.lastIndexOf(2)) // 返回3 (因为从右侧开始查找,输入从右边 要查找的 位置)
 console.log(arr.lastIndexOf(2, 3)) // 1 (参数1:查找2 参数2:从数组最后一个数三位开始查找 2)

一般开发中要找数组中是否包含某个数

  let arr = [1, 2 , 3];
  if(arr.indexOf(2) !== -1){
    console.log('找到了');
  }

新版的es6中 有一个includes() 接受一个参数查找数组中是否有要查找的值 返回的是一个布尔值

 let arr = [1, 2 , 3];
 console.log(arr.includes(2)) //true
 console.log(arr.includes(5)) //false
 if(arr.includes(2)){
   console.log('找到了');
 }

高效的find与findIndex新增方法

   // find 最主要的查找用法 查找引用类型 (引用类型比较 比较的是内存地址 )
   let lessons = [{name: 'js'}, {name: 'php'}, {name: 'css'}];
   let status = lessons.find(item => item.name == 'php'); //就进查找 数组中是否有值 有的话 返回当前值,没有就返回undefined
   let status1 = lessons.find(item => item.name == 'java'); //undefined
   let index = lessons.findIndex(item => item.name == 'php'); //就进查找 数组中是否有值 有的话 返回索引值,没有就返回undefined
   console.log(status); //{name: "php"}
   console.log(status1); // undefined
   console.log(index); // 1

//自定义find写法

    function find (array, callback) {
        for (let item of array){
            if (callback(item)) return item;
        }
        return undefined;
    }

    let arr = [1, 2, 3, 4];
    console.log(find(arr, function (item) {
        return item === 3
    }));

sort排序

    //sort排序
    let arr = [10, 8, 6, 5, 2, 1];
    arr = arr.sort(function (a, b) {
        // -1 从小到大 1 正数从大到小
        // 10 - 8 =
        return a - b;
    });
    arr = arr.sort((a,b) => a - b);
    console.log(arr);
//冒泡排序
// 1、比较相邻的两个元素,如果前一个比后一个大,则交换位置。
// 2、比较完第一轮的时候,最后一个元素是最大的元素。
// 3、这时候最后一个元素是最大的,所以最后一个元素就不需要参与比较大小。
function sort(array) {
    for (let n in array) {
        for (let m in array){
            let tep = [];
            if (array[n] > array[m]){
                tep = array[n];
                array[n] = array[m]
                array[m] = tep;
            }
        }
    }
    return array;
}

console.log(sort([1, 9, 8]));

数组循环操作

//循环操作中引用类型使用技巧
    let arr = [{n: 1}, {n: 2}];
    let arr1 = [1, 2, 3];
    //for of 只能改变引用类型
    for (let value of arr) {
        value.n ++;
    }
    for (let value1 of arr1) {
        value1 ++; // 不会改变值类型的数组
    }
    console.log(arr); // [{n: 2}, {n: 3}]
  console.log(arr1); // [1, 2, 3]

forEach

   let arr = [
        {name : 'JavaScript'},
        {name : 'PHP'},
        {name : 'Python'}
    ]
    arr.forEach((item, index, array) => {
        //item 第一个参数是遍历的数组内容,
        // index 第二个参数是对应的数组索引,
        // array 第三个参数是数组本身
        console.log(item, index, array);
    })

every (返回一个布尔值)

const user = [
        {name: '李四', js: 89},
        {name: '张三', js: 99},
        {name: '马六', js: 55},
    ];
    /**
     * (every() 方法用于检测数组所有元素是否都符合指定条件。一项不符合 就返回false,全部符合就返回true)
     * item 是每一项的 数组
     * index 数组索引值
     * arr 原数组
     * **/
    const res = user.every((item, index, arr) => {
        return item.js >= 60; //false
    });

    if (res) {
        console.log('成绩不合格')
    } else {
        console.log('成绩全部合格')
    }

some (返回一个布尔值)

    //some 当一个为真 就返回真
    const user = [
        {name: '李四', js: 89},
        {name: '张三', js: 99},
        {name: '马六', js: 55},
    ];
    let res = user.some(item => {
        return item.js > 60;
    });
    console.log(res); //true

filter (可以筛选出想要的值,返回一个数组)

    let lessons = [{name: 'js'}, {name: 'php'}, {name: 'css'}];
    //求出数组中包含的css项
    let res = lessons.filter(item => {
        return item.name === 'css'
    });
    console.log(res);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容