为什么要对Array方法进行归类解析

因为它常用,而且面试必问

改变原数组的方法

pop 删除并返回数组最后一个元素
push 从末尾给数组添加元素,返回新数组length值
reverse 颠倒数组元素,返回颠倒后的数组
shift 删除并返回第一个元素值
sort 数组排序
splice 删除指定位置开始指定长度的元素,返回被删除的项目。
unshift 向数组开头添加多个元素,返回新数组长度

不改变原数组

concat 返回合并后数组的副本
join 返回一个通过连接符连接数组元素的字符串
slice 返回选中元素的新数组
toString 返回字符串等同于join()

如何循环一次删除多个元素并改变数组长度

for (var i = arr.length - 1; i >= 0; i--){
if(arr[i] === 1){
arr.splice(i,1)
}
}

操作Array元素的callback的方法集合

forEach、map、filter、every、some、reduce、reduceRight

  • forEach对元素上执行callback的操作
var a = ['1', 20, 30];
a.forEach((item, index, a)=>{
++item
}) // 不会改变a值
a.forEach((item, index)=>{
a[index] = ++item
}) // 改变a值
  • map对元素callback并返回一个由callback返回值组成的新数组
var a = ['1', 20, 30];
var b = a.map((item, index, a)=>{
return ++item // 如果没有return会输出undefined
}) // [2,22,32]
  • filter返回元素callback返回值为true的元素组成的新数组
var a = ['1', 20, 30];
console.log(a.filter((item)=>{
return typeof item === 'string'
})) //['1']
  • every当所有元素的callback都返回true时,值为true。用于判断所有元素是否符合某一条件
var a = ['1', 20, 30];
console.log(a.every((item)=>{
return typeof item === 'string'
})) // false
  • some只要其中一个元素callback返回true,值为true。用于判断某一个元素符合单一条件的情况
var a = ['1', 20, 30];
console.log(a.some((item)=>{
return typeof item === 'string'
})) // true
  • reduce和reduceRight是数组元素两两按照callback的逻辑进行递归处理。返回处理完以后的结果。
var a = ['1', 20, 30];
var total = a.reduce(function(first, second) { return first + second; }, 2);
console.log(total) // 212030(((第二个参数2+'1')+20)+30)
var total = a.reduceRight(function(first, second) { return first + second; }, 2);
console.log(total) // 521(((第二个参数2+30)+20)+'1')

如何循环删除多个元素,数组长度不变

for (let i = 0; i < arr.length; i++){
if(arr[i] === 1){
delete arr[i]
}
}
// 删除对应元素后,对应元素被置换为undefined,但是对应的i值(i in arr为false),直接复制arr[i]=undefined时i in arr 为 true

ES6 数组去重

let arr = [1,2,3,1,2,3,4]
let set = new Set(arr)
arr = [...set]

数组的一些扩展方法

Array.from(),Array.of(),Array.prototype.copyWithin(),includes()

参考文献

Array的扩展方法

js中Array方法归类解析的更多相关文章

  1. String方法,js中Array方法,ES5新增Array方法,以及jQuery中Array方法

    相关阅读:https://blog.csdn.net/u013185654/article/details/78498393 相关阅读:https://www.cnblogs.com/huangyin ...

  2. js中Array方法重写(二):myForEach;myEvery;mySome;myFilter;myReduce

    一.myForEach //myForeach 数组每个元素都执行一次回调函数 Array.prototype.myForEach = function(callback){ for(var i = ...

  3. 原生JS中apply()方法的一个值得注意的用法

    今天在学习vue.js的render时,遇到需要重复构造多个同类型对象的问题,在这里发现原生JS中apply()方法的一个特殊的用法: var ary = Array.apply(null, { &q ...

  4. js中apply方法的使用

    js中apply方法的使用   1.对象的继承,一般的做法是复制:Object.extend prototype.js的实现方式是: Object.extend = function(destinat ...

  5. JS中Array数组的三大属性用法

    原文:JS中Array数组的三大属性用法 Array数组主要有3大属性,它们分别是length属性.prototype属性和constructor属性. JS操作Array数组的方法及属性 本文总结了 ...

  6. 【转载】JS中bind方法与函数柯里化

    原生bind方法 不同于jQuery中的bind方法只是简单的绑定事件函数,原生js中bind()方法略复杂,该方法上在ES5中被引入,大概就是IE9+等现代浏览器都支持了(有关ES5各项特性的支持情 ...

  7. paip.编程语言方法重载实现的原理及python,php,js中实现方法重载

    paip.编程语言方法重载实现的原理及python,php,js中实现方法重载 有些语言,在方法的重载上,形式上不支持函数重载,但可以通过模拟实现.. 主要原理:根据参数个数进行重载,或者使用默认值 ...

  8. [JavaScript] JS中对Base64的解析

    JS中对Base64的解析 <script type="text/javascript"> /** * UTF16和UTF8转换对照表 * U+00000000 – U ...

  9. js中settimeout方法加参数

    js中settimeout方法加参数的使用. 简单使用看w3school  里面没有参数调用,  例子: <script type="text/javascript"> ...

随机推荐

  1. 使用批处理选择运行控制台程序(简易cui)

    批处理可以用于启动一些控制台程序.昨天在github上找到一个有意思的项目OpenRA : 一个开源的红警游戏. 发现该游戏的启动程序(launch-game)是用批处理写的 就学习了下 *没有玩过批 ...

  2. laravel修改用户模块的密码验证

    做项目的时候,用户认证几乎是必不可少的,如果我们的项目由于一些原因不得不使用 users 之外的用户表进行认证,那么就需要多做一点工作来完成这个功能. 现在假设我们只需要修改登录用户的表,表名和表结构 ...

  3. SIGCHLD和wait/waipid函数的关系

    SIGCHILD只是在子进程退出的时候发送给父进程的一个信号值,这是一种异步通知父进程的方式.父进程可以捕获,忽略这个信号,默认动作是忽略此信号. 常用的使用方式是,当SIGCHILD信号发生时候,主 ...

  4. python_操作MySQL 初解

    单文件操作数据库 import random import threading, multiprocessing import time, datetime import pymysql import ...

  5. AtCoder,Codeforces做题记录

    AGC024(5.20) 总结:猜结论,“可行即最优” B: 给定一个n的排列,每次可以将一个数移到开头或结尾,求变成1,2,...,n所需的最小步数. 找到一个最长的i,i+1,...,j满足在排列 ...

  6. 剑指offer-顺时针打印矩阵-数组-python

    题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...

  7. .net几种timer区别

    概述:.net框架不同名称控件都包含了各种timer,但每个timer有什么具体区别呢? 一.System.Threading private static void ThreadingTimer() ...

  8. MySQL on duplicate key update 批量插入并更新已存在数据

    业务上经常存在一种现象,需要批量往表中插入多条数据,但在执行过程中,很可能因为唯一键冲突,而导致批量插入失败.因此需要事先判断哪些数据是重复的,哪些是新增的.比较常用的处理方法就是找出已存在的数据,并 ...

  9. Win7 MongoDB可视化工具Robo 3T 1.2.1(robomongo)的安装使用

    软件版本: Robo 3T 1.2.1 下载网址: https://robomongo.org/campaign 进入robomongo官网,点击download,进入下载页面 这里选择下载 Robo ...

  10. iOS常用数学常量宏

    在实际工作中有些程序不可避免的需要使用数学函数进行计算,比如地图程序的地理坐标到地图坐标的变换.Objective-C做为ANSI C的扩展,使用C标准库头文件<math.h>中定义的数学 ...