操作数组的办法
> push pop shift unshift join reverse concat slice splice > toString toLocaleString indeOf lastIndexOf sort find findIndex fill includes Array.from > forEach map filter every some reduce reduceRight new for-in for-of> new Set() new Map()
push pop 在数组最初增加或删除元素shift unshift 在数组后面增加和删除元素
// slice(start, end)不蕴含end不扭转原数组 和splice()区别var arr = [1,2,3,4,5,6];console.log(arr.slice(2)); //[3,4,5,6] 一个start默认到数组开端console.log(arr.slice(2,8)); //[3,4,5,6] 超过数组长度按arr长度算console.log(arr.slice(2,5)); //[3,4,5] 2-4 不蕴含5下标console.log(arr.slice(2,-1)); //[3,4,5] 绝对于倒数第一个之前console.log(arr.slice(-2));//[5,6] 一个参数负值从倒数第二个到最初console.log(arr.splice(1)) // [] 扭转原数组 清空console.log(arr.splice(0, 1)) // 返回[1] 选取一个 arr=[2, 3, 4, 5, 6]console.log(arr.splice(1, 0, 9)) // 返回[] arr = [1, 9, 2, 3, 4, 5, 6] 两头为0代表插入元素 第三个参数为插入的元素console.log(arr.splice(1,1,8)) // 返回被替换的[2] arr = [1, 8, 3, 4, 5, 6]
// forEach 和 map ,reduce的区别map:接管一个函数,返回新数组forEach 承受一个函数,会扭转原数组 个别用于对数组间接操作的批改reduce- 会扭转原数组 -- reduce函数是为数组中每一个元素顺次执行回调函数,不包含数组中的被删除或未被赋值的元素arr.reduce(callback(val,index,array), [initiaValue])1.prev上一次调用回调返回的值 prev第一次为初始值initiaValue2.数组中以后被解决的元素3.index 以后元素在数组中的索引4.array 调用reduce的数组
// for in 和 for of区别
for of是ES6新增的循环办法
for in循环遍历的是数组的键值(索引),而for of循环遍历的是数组的值。
给数组增加一个自定义属性name,并且赋值"数组"。
而后进行遍历输入的,会发现新定义的属性也被for in输入来了,
而for of并不会对name进行输入。
// every 和 some的区别 every 相当于|| 的关系有一项满足就成立const enum1 = (val) => { return val < 10}console.log([1,20,3,8].some(enum1)) // truesome相当于 &&的关系 所有满足才成立console.log([1,20,3,8].every(enum1)) // false
// es6新增的 find() findIndex() fill() from() includes() reduceconsole.log([1,2,3].find(i => i >2)) // 3返回过滤后的元素console.log([1,2,3].findIndex(i => i >2)) // 2 下标为2console.log([1,2,3].fill(9,0,2))// 用新元素替换掉数组内的元素 fill(value, start, end) [ 9, 9, 3 ] 替换9 从0开始替换两个console.log(Array.from('abcd')) // [ 'a', 'b', 'c', 'd' ] 把元素转化为数组console.log(Array(1,2,3)) // [1, 2, 3])// includes 相似indexOfconsole.log([1,2,6].includes(6)) // trueconsole.log([1,2,6].indexOf(6,0)) // 2 返回下标 从第0个下标开始 查找6
string|array.indexOf(searchvalue,fromindex) //返回下标 不存在返回-1
// 数组A以双倍模式放到B数组// forvar numbers = [1,2,3]var doublenum = []for (var i =0; i<numbers.length; i++){ doublenum.push(numbers[i] * 2)}console.log(doublenum) // [ 2, 4, 6 ]// mapconst maparr = numbers.map(num => num *2)console.log(maparr) // [ 2, 4, 6 ]
// 抽离某些属性到一个数组const colorarr = [ { color: 'red', }, { color: 'yellow' }]const reducearr2 = colorarr.reduce((arr1, arr2) => { arr1.push(arr2.color) return arr1}, [])console.log(reducearr2) // [ 'red', 'yellow' ]
// 数组去重的几种办法 [键值对|indexOf|排序后相邻去除法// 键值对let testres = []let testjson = {}const testarr = [1,2,3,2,5,,]for (let i = 0; i<testarr.length; i++) { if (!testjson[testarr[i]]) { testres.push(testarr[i]) testjson[testarr[i]] = 1 }}console.log(testarr) // [ 1, 2, 3, 2, 5, <1 empty item> ]const testarr2 = [1,2,3,4,2,3,5]// set 形式console.log([...new Set(testarr2)]) // [ 1, 2, 3, 4, 5 ]// 原始indexOfconst testarr2 = [1,2,3,4,2,3,5]for (let i = 0; i< testarr2.length; i++) { if (res_.indexOf(testarr2[i]) === -1) { res_.push(testarr2[i]) }}console.log(res_) // [ 1, 2, 3, 4, 5 ]//sortconst testarr2 = [1,2,3,4,2,3,5]function sortRep (arr) { arr.sort() var temp = [arr[0]] for (var i =1; i<arr.length; i++) { if(arr[i] !== temp[temp.length - 1] ) { temp.push(arr[i]) } } return temp}console.log(sortRep(testarr2)) // [ 1, 2, 3, 4, 5 ]