ES6中数组的语法

ES6中新增了一些数组的方法

  1. forEach():用于循环数组

  2. map():用于处理数组

  3. some()和every():用于判断是否正确

  4. filter():用于过滤数组

  5. reduce():用于处理数组

一、forEach()

        forEach用于遍历数组,和for循环遍历数组基本一致

const arr=[1,2,3,4,5];
arr.forEach(item=>{
	console.log(item)
})
console.log("---------")
for(let i =0;i<arr.length;i++){
console.log(arr[i])
}

可以发现都能实现遍历数组,但是两者在终止循环方面是有区别的

const arr=[1,2,3,4,5];
for(let i =0;i<arr.length;i++){
	console.log(arr[i])
	if(arr[i]===4){
		break
	}
}
console.log("后续代码")

 在for循环中可以使用break来终止循环并且不会影响后续的代码

如果使用forEach会发现break和return都无法达到效果

使用break会报错

		const arr=[1,2,3,4,5];
		arr.forEach(item=>{
			console.log(item)
			if(item==4){
				break;
			}
		})

 使用return false没有任何效果

		const arr=[1,2,3,4,5];
		arr.forEach(item=>{
			console.log(item)
			if(item==4){
				return false
			}
		})

 需要用thorw来抛出错误才能终止循环,但是直接抛出后续的代码无法执行

		const arr=[1,2,3,4,5];
		arr.forEach(item=>{
			console.log(item)
			if(item==4){
				throw new Error("循环到4需要终止")
			}
		})
		console.log("后续代码")

 所以需要使用try和catch判断报错信息,如果是你写的代码就不让他抛出错误,这样才能执行后续的代码

		try{
			const arr=[1,2,3,4,5];
			arr.forEach((item)=>{
				console.log(item)
				if(item==4){
					throw new Error("有一个等于四了");
				}
			})
		}
		catch(e){
			if(e.message !="有一个等于四了"){
				throw e;
			}
		}
		console.log("后续的代码")

 二、map()

map()给数组中的每一个元素添加特殊处理,返回新的数组

但是map不会用函数处理只有长度的空数组

		// 创建一个长度为10的数组
		const arr=new Array(10) 
		const arr2=arr.map((item,index)=>{
			return index
		})
		console.log(arr2)

 所以如果需要让map处理需要把每个索引都加上元素

		// 这样能创建任意长度,元素等于索引的数组
		// 创建一个长度为10的数组
		const arr=new Array(10)
        //这样写也行
        //const arr=Array.from({
		//	length:10
		//})
		const arr2=arr.fill(1).map((item,index)=>{
			return index
		})
		console.log(arr2)

三、some和every

some()依次拿出数组中的元素与特定的值进行比较,如果一个是真的就返回真,如果全假就返回假

every()依次拿出数组中的元素与特定的值进行比较,如果一个是假的就返回假,如果全真就返回真

 

		const score=[50,60,100,54,90];
		let result=score.some(item=>{
			return item>=60
		})
		let result2=score.every(item=>{
			return item>=69
		})
		console.log(result)//true
		console.log(result2)//false

四、filter用于过滤数组

依次拿出数组中的元素,返回符合要求的元素

			// 过滤出成绩大于60的学生
			const students = [{
				name: "小红",
				score: 90
			},{
				name: "小明",
				score: 50
			},{
				name: "小张",
				score: 60
			},{
				name: "小王",
				score: 30
			},{
				name: "张三",
				score: 100
			}]
			const arr=students.filter((item)=>{
				 return item.score>60
			})
			console.log(arr)

 五、reduce用于处理函数

reduce处理的数组只有一个返回值

他有四个参数

  1. prev参数 上次操作的返回结果

  2. item 当前梳理数组的元素

  3. index当前梳理数组元素

  4. array 当前对应的数组

给数组去重的方法

1.暴力for循环去重

			const arr=[1,2,3,1,1,2,34,5,67,23,2,2];
			const result=[];
			arr.forEach(item=>{
				if(!result.includes(item)){
					result.push(item)
				}
			})
			console.log(result)

2.利用数组下标去重

			const arr=[1,2,3,1,1,2,34,5,67,23,2,2];
			const result=arr.filter((item,index)=>{
				return arr.indexOf(item)===index
			})
			console.log(result)

3.用Set实现去重

			const arr=[1,2,3,1,1,2,34,5,67,23,2,2];
			const result=new Set(arr);
			console.log(result)

4.双循环去重

			const arr=[1,2,3,1,1,2,34,5,67,23,2,2];
			for(let i=0;i<arr.length;i++){
				for(let j=i+1;j<arr.length;j++){
					if(arr[i]===arr[j]){
						arr.splice(j,1)
						j--
					}
				}
			}
			console.log(arr)

5.reduce去重

			const arr=[1,2,3,1,1,2,34,5,67,23,2,2];
			const result=arr.reduce((prev,item)=>{
				if(!prev.includes(item)){
					prev.push(item)
				}
				return prev
			},[])
			console.log(result)

给对象统计重复次数的方法

用reduce实现

			const arr=[1,2,3,1,1,2,34,5,67,23,2,2];
			const result=arr.reduce((prev,item)=>{
				if(item in prev){
					prev[item]++
				}else{
					prev[item]=1
				}
				return prev
			},{})
			console.log(result)

使用双层for循环实现

			const arr = [1, 2, 3, 1, 1, 2, 34, 5, 67, 23, 2, 2];
			for (let i = 0; i < arr.length; i++) {
				if (arr.indexOf(arr[i]) == i) {
					var num = 1;
					for (let j = i + 1; j < arr.length; j++) {
						if (arr[i] === arr[j]) {
							num++;
						}
					}
					console.log(arr[i] + "出现的次数是:" + num)
				}
			}

おすすめ

転載: blog.csdn.net/cvenginner/article/details/121862677