数组方法:
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);
检查是否为数组:
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。
数组去重
使用Set
let arr = [100, 234, 2342,1112, 100, 300, '100', 'hello', 'hello', NaN, NaN];
let newArr = [...new Set(arr)];
使用reduce+includes
function 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) {
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;
}