数组方法ES5 + ES6
sort / reverse
主要用于排序,会影响原来数组。const arr = [1, 2, 3] arr.sort(); // 正序 arr.reverse(); // 反序 arr.sort(() => 0.5 - Math.random()); // 乱序
splice
编辑元素,会影响原来数组
// splice(目标下标, 删除多少元素, 插入元素); const arr = [1, 2, 3] console.log(arr, arr.splice(0, 0, '我')) // ['我', 1, 2, 3] // 增加元素 console.log(arr, arr.splice(0, 1, '我')) // ['我', 2, 3] // 替换元素,返回被替换元素 console.log(arr, arr.splice(0, 1)) // [2, 3] // 删除目标下标元素,返回被删除元素
slice
根据指定开始结束截取数组,不会影响原来数组
const arr = [1, 2, 3, 4, 5, 6] console.log(arr.slice(0, 2)); // [1, 2] // 截取段
map
返回处理后的元素,不会影响原来数组
const arr = [ { name: 'tom', age: 17 }, { name: 'anne', age: 16 }, { name: 'jack', age: 18 }, ] // 返回数组,数组的元素为原始数组元素调用函数处理后的值 console.log(arr.map(item => item.name)); // ['tom', 'anne', 'jack']
filter / find
过滤数组元素,不会影响原来数组
const arr = [1, 2, 3, 2] // filter: 返回数组,循环所有元素,返回所有符合条件的元素 console.log(arr.filter(item => item === 2)); // [2, 2] // find: 返回单个元素,只要有一个元素符合条件立即结束循环并返回元素 console.log(arr.find(item => item === 2)); // 2
some / every
是否存在元素,不会影响原来数组some运行过程:
return true : 立即结束循环,最终结果为true
return false : 继续循环,直到所有元素都遍历一次,如果遍历所有元素都是false,最终结果为false
every运行过程:
return true : 继续循环,直到所有元素都遍历一次,如果遍历所有元素都是ture,最终结果为true
return false : 立即结束循环,最终结果为false
const arr = [1, 2, 3] // some:只要有一项返回true,则返回true console.log(arr.some(item => item === 2)); // true // every:必须所有项返回true,才返回true;一旦有一项返回flase,就返回flase console.log(arr.every(item => item >= 2)); // flase
shift / unshift / pop
编辑数组,会影响原来数组
const arr = [1, 2, 3] // shift: 删除数组第一个元素并返回删除元素 console.log(arr, arr.shift()); // [2, 3], 1
// unshift: 向数组的开头添加一个元素,并返回数组长度 const arr = [1, 2, 3] console.log(arr, arr.unshift(0)); // [0, 1, 2, 3], 4
const arr = [1, 2, 3] // 删除数组最后一个元素并返回删除的元素 console.log(arr, arr.pop()); // [1, 2], 3
join:
指定分隔符连接数组元素,不填任何符号就默认用逗号,会影响原来数组
const arr = [1, 2, 3] console.log(arr.join("-")); // 1-2-3
for of / for in
遍历数组,不会影响原来数组
// for of 拿到是数组对象value,主要用作遍历数组、类数组对象,字符串、Set、Map 以及 Generator 对象 const arr = [ { name: 'tom', age: 17 }, { name: 'anne', age: 16 }, { name: 'jack', age: 18 }, ] for (const item of arr) { console.log(item); } // 通过entries获得下标与元素 for (const [i, item] of arr.entries()) { console.log(i, item); }
// for in 拿到是数组对象key,主要用作遍历对象 // 跳出这次循环:return // forEach没有跳出整个循环的方法,但可以用异常的方式来跳出,可这种方法太不友好 const obj = { name: 'tom', age: 17 } for (const key in obj) { const item = obj[key] console.log(key, item); }
forEach
// 常用于遍历数组,循环无法中途跳出,break return 都无效 // 语法: array.forEach(callbackFn(item, index, arr), thisValue) // 参数: item-当前元素 index-下标 arr-被循环数组 thisValue-执行回调函数 callbackFn 时,用作 this 的值 const arr = [ { name: 'tom', age: 17 }, { name: 'anne', age: 16 }, { name: 'jack', age: 18 }, ] arr.forEach((item, index, arr) => { console.log(item, index, arr); })
reduce / reduceRight
一篇写的很好的reduce教程:https://www.cnblogs.com/amujoe/p/11376940.html
reduce主要用于循环数组进行累计、累加
reduceRight与reduce用法相同,只是遍历顺序相反
// 做汉堡包为例子 const list = [ { name: '生菜', icon: '🥬' }, { name: '西红柿', icon: '🍅' }, { name: '酸黄瓜', icon: '🥒' }, { name: '奶酪', icon: '🧀' }, { name: '牛肉饼', icon: '🥩' }, { name: '面包', icon: '🍞' }, ] const init = { name: '面包', icon: '🍞' } // 语法: array.reduce((prev, cur, index, arr)=>{}, init); // 参数 // init 初始值 // arr 被循环数组 // prev 上一次调用回调返回值或者初始值 // cur 当前元素 // index 当前元素下标, 若有 init 值,则下标为0否则为1 const hamburger = list.reduce((prev, cur, index, arr) => { // console.log(prev, cur, index, arr); console.log(prev, cur); return { name: `${prev.name}/${cur.name}`, icon: `${prev.icon}${cur.icon}`, } }, init); console.log(`${hamburger.icon}===🍔`);