// 常用的几个方法
// console.log('pop 用来删除数组的最后一个元素 并返回该元素')
// let x=[1,2,3,4]
// console.log(x.pop())
// console.log(x)
// console.log('改变原数组')
// console.log('push 用来向数组末尾添加元素 并返回新的长度')
// let x=[1,2,3,4]
// console.log(x.push(6,7))
// console.log(x)
// console.log('改变原数组')
// console.log('shift 用来删除数组的第一个元素 并返回该元素')
// let x=[1,2,3,4]
// console.log(x.shift())
// console.log(x)
// console.log('改变原数组')
// console.log('unshift 用来向数组开头添加元素 并返回新的长度')
// let x=[1,2,3,4]
// console.log(x.unshift(6,7))
// console.log(x)
// console.log('改变原数组')
// console.log('slice 返回由start和end决定的数组')
// let x=[1,2,3,4]
// console.log(x.slice(0,2))
// console.log('splice 向数组的任意位置替换 可用来做删除和新增')
// let x=[1,2,3,4]
// console.log(x.splice(1,1,'a')) // 返回1,1删除的元素 1 a 3 4
// console.log(x.splice(1,0,'a')) // 返回1,0删除的元素 啥都没有 1 a 2 3 4
// console.log(x.splice(1,1)) // 返回1,1删除的元素 2 3 4
// 访问 拼接 复制 填充 反转 变为字符串
// let x=[{id:'a',age:8},{id:'b',age:13},{id:'c',age:11}]
// console.log('at 访问数组中元素的方法')
// console.log('下标是正序,at可以是正可以是倒')
// console.log('1、index:x[0]',x[0])
// console.log('2、at:x.at(-1)',x.at(-1))
// console.log('concat 拼接数组的方法')
// console.log(x.concat([6,7]))
// console.log('copyWithin(要放的位置,起始点,结束点) 用以复制元素')
// console.log(x)
// console.log(x.copyWithin(1,0,2))
// console.log('fill 填充 使用值填充指定位置 fill(newval,start,end)')
// console.log(x.fill('c',1,2))
// console.log('reverse 反转数组')
// let x=[1,2,3]
// console.log(x.reverse())
// console.log('join 数组插入为字符串')
// let x=[1,2,3]
// console.log(x.join(''))
// 将多维数组平铺
// console.log('flat 根据制定层级 将多维数组平铺')
// let x=[1,2,3,[4,[5,[6]]]]
// console.log('默认深度为1级',x.flat())
// console.log('不会改变原数组',x)
// console.log('可以来指定深入层级',x.flat(2))
// console.log('可以使用Infinity展开全部',x.flat(Infinity))
// console.log('flatMap 和 map 的比较 作用基本类似 flatMap自带平铺 深度死值为1')
// let x=["it's Sunny in", "", "California"];
// console.log(x.map(item=>item.split(' '))) // 因为split 子项都成为了数组
// console.log(x) // 不会改变原数组
// console.log(x.flatMap(item=>item.split(' '))) // 因为split 子项成为了数组 因为flat 子项被平铺
// 用来检测子项是否符合要求 返回true和false
// console.log('some 对数组中的子项进行检测 有一项满足就是true 不再继续进行 都不满足则为false')
// let x=[1,2,3]
// console.log(x.some(item=>item>2))
// console.log('every 用来检测所有的子项是否符合要求,一个不符就为false,全符即为true')
// console.log(x.every(item => item.id==='a'))
// console.log('includes 判断一个数组中是否有指定的值 判断内容为常规类型可 引用类型不行 有就true 无就false')
// let x=[{a:1,b:1},{a:2,b:2}]
// console.log(x.includes({a:1,b:1}))
// let x=[1,2]
// console.log(x.includes(1))
// 用来返回子项位置
// console.log('findIndex 返回数组中妈祖提供的测试函数的 【第一个】 元素的下标')
// console.log(x.findIndex(item=>item.age>10))
// console.log('indexof 返回制定元素在数组中[第一次]出现的位置 无就-1')
// let x=[1,2,3,2]
// console.log(x.indexOf(2))
// console.log('lastIndexOf 返回制定元素在数组中【最后一次】出现的位置')
// let x=[1,2,3,2]
// console.log(x.lastIndexOf(2))
// 用来返回子项
// console.log('filter 筛选 返回所有满足条件的子项 返回值为数组')
// console.log(x.filter(item=>item.id==='c'))
// console.log('find 返回数组中满足提供的测试函数的 [第一个] 元素的值')
// console.log(x.find(item=> item.age>10))
// 为每一个子项执行方法的
// console.log('forEach 为每一个子项执行的方法')
// let x=[{a:1,b:1},{a:2,b:2}]
// console.log(x.forEach(item=> {delete item.b})) // 没有return 无返回值 改变元数据
// console.log('map 返回一个对原数组处理后的数组')
// let x=[1,2,3,2]
// console.log(x.map(item=>{return item*2}))
// console.log(x.map(item=>{item*2}))
// console.log(x)
// console.log('得使用return加返回值 不会改变原数组')
// reduce 第一个参数可以用来保存上次运行的结果
// console.log('reduce 文档是可以用来做求和 实际可以用来做去重')
// let x=[1,2,3,4]
// console.log('求和',x.reduce((total,current)=>{return total+current})
// 注意语法 末尾得有【】用来接收
// let x = [1, 2, 3, 4, 5, 4, 2, 1]
// console.log('去重', x.reduce((total, current) => { if (!total.includes(current)) { total.push(current) } return total },[]))
// 对子项是对象的数组去重
// let arrList = [{ a: 1, b: 1 }, { a: 2, b: 'b' }, { a: 2, b: 2 }];
// function doRepeat(arr, key) {
// let obj = {}
// let newArr1 = arr.reduce((acc, cur) => {
// if (!obj[cur[key]]) {
// obj[cur[key]] = cur[key]
// acc.push(cur)
// }
// return acc
// }, [])
// return newArr1
// };
// // 姓名去重
// console.log(doRepeat(arrList, 'a'));
// set 去重 常用的方法有add clear delete
// let x = new Set([1,2,3,4,3,2,1])
// console.log(x)
// x.add(3) // 3已经有了 不会被添加
// x.add(111) // 111没有 会被添加
// x.delete(111) // 111会被删除
// x.clear() // x 被清空
// 去重
// function distinct(arr1,arr2){
// return [...new Set([...arr1,...arr2])]
// }
// let arr = distinct([1,2,3],[2,3,4,5])
// console.log(arr) // [1,2,3,4,5]
// 求交集
// function intersect(arr1,arr2) {
// // 利用Set里的方法has,来判断new Set(arr2)中是否含有item,
// // 如果含有,那么则是true,当为true时,filter函数则会保留该项
// // 如果没有,则是false,当为false时,filter函数则不会保留该项
// return arr1.filter(item => new Set(arr2).has(item))
// }
// console.log(intersect([1,2,3],[2,3,4,5])) // [2,3]
// 求差集
// function difference(arr1,arr2){
// return arr1.filter(item => !new Set(arr2).has(item))
// }
// console.log(difference([1,2,3],[2,3,4,5])) // [1]
console