ES5和ES6中数组常用方法总结

数组无疑是js中核心数据类型之一,在DOM操作中,获取的元素一般都是一个类数组的集合,其中数组迭代方法使用的比较多。这里总结数组中比较常用的方法,方便查阅。

操作方法

  1. concat() :添加数组成员,返回添加后的新数组,不改变原数组;
        let myArr = ['grade', 'name', 'age', 18, {}]
        console.log(myArr.concat(23)); //["grade", "name", "age", 18, {…}, 23]
        console.log(myArr); // //["grade", "name", "age", 18, {…}]

字符串也可以用concat方法,字符串使用的话就像 + 连接符一样。

        console.log("2".concat("3")); // “23”
  1. slice(arg1,arg2) :截取方法,确切的说是复制一段数据,返回的是截取后新数组,不包含最后的终止位置元素
    参数1:表示开始截取的起始位置的索引号;
    参数2:表示截取的终止位置 ;
		// 从索引位置1开始截取,位置2取不到,只截取到一个 [name]
        console.log(myArr.slice(1, 2)); 
        console.log(myArr.slice(2)); // 从索引2截取到末尾 ["age", 18, {…}]
  1. splice(index[,delNum,addEle]),主要用途是往数组中插入元素 可以添加、删除、替换元素;
    index:起始位置 对应索引号;
    delNum:删除的个数;可选的
    addEle:要添加的元素;可选的
    splice方法功能比较强大。
        let arr2 = [33, 55, 22, 11, 10, 88, 6];
        
        // 插入
        arr2.splice(1, 0, "insert"); // 从索引1的位置开始,不删除元素,插入一个"insert"
        console.log(arr2); //[33, "insert", 55, 22, 11, 10, 88, 6]
        
        // 删除
        let delEle = arr2.splice(0, 2); // 返回[33, "insert"] 删除的元素
        console.log(arr2); // [55, 22, 11, 10, 88, 6]
        
        // 替换
        // let replaceEle = arr2.splice(2, 1, 100); // 把 11 删除替换成 100,返回被删除的元素11
        // 替换的元素可以是多个,后面的元素依次向后移动
        let replaceEle = arr2.splice(2, 1, 100, 200); // 把 11 删除替换成 100,接着把200放在100后面,后面的元素向后移动一个位置,返回被删除的元素11
        console.log(replaceEle); // 11
        console.log(arr2); //  [55, 22, 100, 200, 10, 88, 6]

操作数组元素

		let arr1 = [2, 3, 8, 9, 10];

1. push() : 在数组尾部添加元素,可以添加多个元素,返回值是修改后数组的长度;

        console.log(arr1.push(99, "hh")); // 返回数组的长度 7
        console.log(arr1); // [2, 3, 8, 9, 10,99, "hh"]

2. pop():在数组末尾删除一个元素,一次加粗样式只能删除一个,返回值删除的元素;

        console.log(arr1.pop()); // "hh"
        console.log(arr1);// [2, 3, 8, 9, 10,99,]

3. unshift() 在数组前面添加元素,可以添加多个元素,返回值是修改后数组的长度;

        console.log(arr1.unshift("before", 1111)); // length
        console.log(arr1);//["before", 1111,2, 3, 8, 9, 10,99,]

4. shift() : 在数组前面删除一个元素 一次只能删除一个 返回删除的元素;

        console.log(arr1.shift()); // “before”
        console.log(arr1);// [1111,2, 3, 8, 9, 10,99,]

排序方法

		let arr1 = [2, 3, 8, 9, 10];
        // sort() :排序 需要传递一个函数作为参数。数组中的每一个元素都会走一遍函数
        console.log(arr1.sort(function (a, b) {
            return b - a; // 降序。
        }));
        // 参数的本质与冒泡的原理类似,两两比较,
        // b - a > 0 时,返回的是,大的数放前面
        // b - a < 0 时,返回的是,小的数在前面
        // reverse() :数组反转
        console.log(arr1.reverse()); // 变为升序

位置方法

indexOf(ele[,index]) :从前往后找,返回第一个满足条件的元素,不存在的元素返回-1;
lastIndexOf(ele[,index]) :从后往前找,返回第一个满足条件的元素,不存在的元素返回-1;
参数:ele —— 数组元素;index(可选) —— 起始寻找的位置,索引号

        let arr3 = [1, 2, 3, 4, 2, 5];
        console.log(arr3.indexOf(2)); // 元素2的索引:1
        console.log(arr3.indexOf(99)); // 元素99的索引:不存在返回 -1
        console.log(arr3.lastIndexOf(2)); // 元素2的索引:4 
        // 第二个可选的参数表示查找起点的索引 
        console.log(arr3.indexOf(2, 3)); // 从索引号3开始往后找,元素2的索引:4

迭代方法

ECMAScript5新增的5中迭代方法:

  • 这五个方法都接收两个参数: 参数1:一个处理的函数,每个数组元素都会调用的函数;
    参数2可选的:指定运行该函数的作用域 ——this对象。
  • 参数1的函数接收三个参数: item:当前数组元素 index:当前数组元素对应的索引值 array:原始数组对象
  • every() :遍历数组,所有元素返回true,则返回true
  • some() :遍历数组,有一个元素返回true,则返回true
  • filter() 过滤器:遍历数组,返回满足条件元素组成的数组。
  • map() :映射,遍历数组,每一项经过其他操作返回对应的项组成的数组。
  • forEach() :就是循环遍历,本质是for循环迭代数组实现,无返回值
        // 下面的方法接收的两个参数:
        // 参数1:函数接收三个参数,参数1:当前元素,参数2[可选]:当前元素的索引,参数3[可选]:元素所在的对象
        // 参数2:可选,指定运行该函数的环境,可改变this的值

        let arr = [33, 55, 22, 11, 10, 88, 6];
        // 1.every() :遍历数组,所有元素返回true,则返回true
        let eve = arr.every(function (ele, index, array) {
            // return ele > 2; // true
            return ele < 2; // false
        });
        console.log(eve);

        // 2.some() :遍历数组,有一个元素返回true,则返回true
        let som = arr.some(function (ele, index, array) {
            return ele > 2; // true
            // return ele < 10; // true
        });
        console.log(som);

        // 3.filter() :遍历数组,返回满足条件元素组成的数组。过滤器
        let fil = arr.filter(function (ele) {
            return ele > 22;
        });
        console.log(fil); //[33, 55, 88]

        // 4.map() :映射,遍历数组,每一项经过其他操作返回对应的项组成的数组
        // 对数组中的元素做操作,可以使用map
        let ma = arr.map(function (ele) {
            return ele / 10;
        })
        console.log(ma); // 每一次/10后组成的数组结果,每一项与操作前的每一项一一对应,也就体现了映射的概念

        // 5.forEach() :就是循环遍历,本质是for循环迭代数组实现,无返回值
        arr.forEach(function (ele, index) {
            console.log("元素是:" + ele + ",对应的索引是:" + index);
        })

归并方法

reduce(func[,base]) : 从前往后遍历 常用;
reduceRight(func[,base]) : 从后往前遍历。
两个归并的方法返回值都是经过函数处理过后的结果值。

		// 6.归并
        // reduceRight(func[,base]) : 从后往前遍历
        // reduce(func[,base]) : 从前往后遍历 常用
        // func(prev,cur,index,originObj)的参数
        // prev : 前一个值(默认是遍历的数组的第一个元素),接收遍历对象每次归并的结果
        // cur : 当前值 
        // index : 当前值的索引号
        // originObj : 原始的数组对象
        // base是归并的基础值,默认的话是遍历数组中的第一个元素
        // reduce() :归并,也叫汇总,与map是相关的方法,返回值是归并的结果

        // eg:求和 33, 55, 22, 11, 10, 88, 6
        let sum = arr.reduce(function (prev, cur, index) {
            // console.log(index + " 归并的基础值: " + prev + " 当前值 " + cur);
            return prev += cur;
            // 分析一下过程:
            // 第一趟1     33 += 55 --> 88 作为下一次遍历时prev的值
            // 第一趟2     88 += 22 --> 110
            // 第一趟3     110 += 11 --> 121
            // 第一趟4     121 += 10 --> 131
            // 第一趟5     131 += 88 -->  219
            // 第一趟6     219 += 6 --> 225 
        })
        console.log(sum);
        // 传递归并基础值时
        // let sum = arr.reduce(function (prev, cur, index) {
        //     // console.log(index + " 归并的基础值: " + prev + " 当前值 " + cur);
        //     return prev += cur;
        //     // 分析一下过程:
        //     // 第一趟1     10 += 33 --> 43 作为下一次遍历时prev的值
        //     // 第一趟2     43 += 55 --> 98
        //     // ......
        // }, 10)   235

其他新增方法

  1. includes(元素,查找的起始位置索引) 检测数组中是否包含被检测元素;
  2. find(fn) 返回第一个满足检测条件的元素,找不到则返回undefined;
    findIndex(fn) 返回第一个满足检测条件的元素的索引值,找不到则返回-1
    其中参数fn是函数,函数接收的参数与迭代方法函数接收的参数一样。
  3. keys()、values()、entries() 可迭代的对象,遍历可取得对应的键、值、键值对。
        // 1.includes(元素,查找的起始位置索引)  检测数组中是否包含被检测元素
        // 返回布尔值 存在true 不存在false
        let arr = [33, 55, 22, 11, 10, 88, 6];
        console.log(arr.includes(22, 3));

        // 2.find(fn)  返回第一个满足检测条件的元素,找不到则返回undefined
        // fn函数的三个参数与迭代方法参数一样 
        let fin = arr.find(function (ele) {
            return ele > 88; //undefined
            // return ele > 33; //55
        });
        console.log(fin);

        // 3.findIndex(fn)  返回第一个满足检测条件的元素的索引值,找不到则返回-1
        // fn函数的三个参数与迭代方法参数一样 
        let finIndex = arr.findIndex(function (ele) {
            return ele > 88;
        });
        console.log(finIndex);

		// 4. 可迭代的对象
        // keys(): 键 ,数组中对应的是索引;对象对应的是属性名
        // values(): 值 ,数组中对应的是数组元素;对象对应的是属性值
        // entries(): 键值对 ,键值对
        for (const key of arr.keys()) {
            console.log(key); // 索引值
        }
        for (const value of arr.values()) {
            console.log(value); // 索引值对应的值
        }
        for (const [key, value] of arr.entries()) {
            console.log(key, value); // 索引值
        }

检测数组方法以及转换方法

        let arr1 = [2, 3, 8, 9, 10];
        // 1.检测数组
        console.log(Array.isArray(arr1)); // true 返回为真
        console.log(arr1.join("-")); // 转化为字符串 以 - 链接的字符串
        console.log([2].join("+"));  // 2

        // 2.取得数组中的值
        console.log(arr1.toLocaleString()); // 2,3,8,9,10
        console.log(arr1.toString()); // 2,3,8,9,10
        console.log(arr1.valueOf()); // [2, 3, 8, 9, 10]

欧克。实际应用的话综合性还是比较强的,一定要在熟练的基础上运行。
加油吧!!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当谈论到 JavaScript 语言时,ES5ES6 是两个常用的术语,它们分别代表着 ECMAScript 5 和 ECMAScript 6,是 JavaScript 的两个主要版本。 ES5JavaScript 的第五个 ECMAScript 标准,于2009年发布。它引入了许多重要的语言特性,包括严格模式、数组的一些新方法(如 forEach、map、filter 等)、Object.defineProperty() 方法、JSON 对象、Function.prototype.bind() 方法等。 ES6(也称为 ES2015)是 JavaScript 的第六个 ECMAScript 标准,于2015年发布。它引入了许多令人兴奋的新特性和语法改进,如箭头函数、类和模块、解构赋值、默认参数值、扩展运算符、Promise、模板字符串等。 以下是 ES5ES6 之间的一些主要区别: 1. 语法:ES6 引入了更简洁和直观的语法,如箭头函数、模板字符串和解构赋值。这些语法改进使得代码更易读和编写。 2. 类和模块:ES6 引入了类和模块的概念,使得面向对象编程更加方便和易用。在 ES5 ,我们通常使用原型和构造函数来实现类的概念。 3. 扩展运算符:ES6 引入了扩展运算符(...),它可以用于数组和对象的展开操作,使得操作更加方便。 4. 箭头函数:ES6 引入了箭头函数,它提供了更简洁的函数定义方式,并且自动绑定了上下文,避免了 this 指向的困扰。 5. Promise:ES6 引入了 Promise,它是一种处理异步操作的机制,使得异步编程更加简洁和可读。 除此之外,ES6 还引入了许多其他特性,如块级作用域、默认参数值、生成器函数、模块化等,这些特性在 ES5 是不可用的。 总的来说,ES6JavaScript 语言进行了一系列的改进和扩展,使得我们能够更加方便地编写现代化的、可维护的 JavaScript 代码。然而,由于兼容性考虑,有些新特性需要通过编译或者使用转译工具才能在所有浏览器上运行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值