数组方法:
arr.splice(start,删除元素个数,添加元素1,元素2)删除数组元素(并替换改变原数组
arr.slice(start,end)返回一个新数组,将所有从索引 start 到 end(不包括 end)的数组项复制到一个新的数组
arr.concat(arr1,arr2,1,2)拼接数组生成一个新数组可以传入数组或者值
arr.forEach((item,index,array)=>{})函数作为一个参数 为数组的每个元素都运行一个函数。该函数没有返回值
数组搜索:按索引
arr.indexOf(item, from)从索引 from 开始搜索 item,如果找到则返回索引,否则返回 -1。
arr.lastIndexOf(item, from)—— 和上面相同,只是从右向左搜索。
arr.includes(item, from)—— 从索引 from 开始搜索 item,如果找到则返回 true(译注:如果没找到,则返回 false)
注意:
这些方法使用的是严格相等 === 比较所以如果我们搜索 false,会精确到的确是 false 而不是数字 0。
如果我们想检查是否包含某个元素,并且不想知道确切的索引,那么 arr.includes 是首选。
此外,includes 的一个非常小的差别是它能正确处理NaN,而不像 indexOf/lastIndexOf
数组搜索:按特定条件搜索
arr.find((item,index,array)=>{…})如果返回 true,则返回 item并停止迭代;对于假值(falsy)的情况,则返回 undefined
arr.findIndex(()=>{})同find 凡是返回的是找到元素的索引而不是元素本身,并且在未找到任何内容时返回 -1。
arr.filter(()=>{})find直接返回第一个符合条件的元素,如果有多个可以用filter,返回的是所有匹配元素组成的数组
转换数组:
arr.map((item,index,array)=>{})它对数组的每个元素都调用函数,并返回结果数组。
arr.sort(): 对数组进行原位(in-place) 排序
arr.reverse()颠倒数组中的元素,改变原数组,也返回颠倒后的数组
str.split(‘,’,3)将字符串中逗号处分隔为字符串并取出前三个元素返回新数组
arr.join(‘,’)使用逗号连接数组返回一个字符串
reduce()累加器let value =arr.reduce(function(accumulator, item, index, array){// …},[initial]);
let arr = [1, 2, 3, 4, 5];let result = arr.reduce((sum, current) => sum current, 0);alert(result); // 15复制代码检查是否为数组:
Array.isArray(arr)返回布尔值 可以区别对象和数组
arr.some(fn)
arr.every(fn)对数组的每个元素调用函数 fn。如果任何/所有结果为 true,则返回 true,否则返回 false。
其他
arr.fill(value, start, end)—— 从索引 start 到 end,用重复的 value 填充数组。
arr.copyWithin(target, start, end)—— 将从位置 start 到 end 的所有元素复制到 自身 的 target 位置(覆盖现有元素)。
arr.flat(depth)/arr.flatMap(fn)从多维数组创建一个新的扁平数组。
展开多维数组,该方法返回一个新数组,对原数据没有影响。
flat() 方法的参数是一个整数,表示想要拉平的层数,默认为1,表示拉平一层。如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数
Array.of(element0[, element1[, …[, elementN]]])基于可变数量的参数创建一个新的 Array 实例,而不需要考虑参数的数量或类型
entries(),keys() 和 values() 方法三个方法都返回一个遍历器对象,可以用for…of循环进行遍历
数组方法的应用遍历数组
当我们需要遍历一个数组时 —— 我们可以使用 forEach,for 或 for..of。
当我们需要遍历并返回每个元素的数据时 —— 我们可以使用 map。
数组去重使用Setlet arr = [100, 234, 2342,1112, 100, 300, ‘100’, ‘hello’, ‘hello’, NaN, NaN];let newArr = […new Set(arr)]; 复制代码使用reduce includesfunction unique(arr){ return arr.reduce((prev,cur)=>prev.includes(cur) ? prev :[…prev,cur],[])}复制代码数组拷贝浅拷贝
扩展运算符 var newArr = […arr]
利用concat方法,不写参数 var newArr = arr.concat();
利用数组截取 var newArr = arr.slice(0)
深拷贝
JSON
let obj2=JSON.parse(JSON.stringify(obj1));复制代码
递归实现
//定义函数 获取对象的构造函数(类)名function getObjectClass(obj) { return Object.prototype.toString.call(obj).slice(8,-1)}//深拷贝的函数function deepClone(obj) { //判断obj是对象是数组还是其他 if (getObjectClass(obj) === ‘Object’) { var res = {}; //创建空的对象 } else if (getObjectClass(obj) === ‘Array’) { var res = []; //创建空数组 } else { return obj; //直接把参数返回 } //对传入的对象(遍历)进行遍历 for (let i in obj) { res[i] = deepClone(obj[i]); } //返回新数组或对象 return res;}复制代码
转自:https://juejin.cn/post/6980556008481357861