zoukankan      html  css  js  c++  java
  • 数组去重,排序,重复次数,两个数组合并,两个数组去重,map(),filter(),reduce()

    <!DOCTYPE html>
    <html>
    
    	<head>
    		<meta charset="UTF-8">
    		<title></title>
    	</head>
    
    	<body>
    	</body>
    
    </html>
    <script>
    	//数组,冒泡排序,把数组从小到大排序
    	function bubbleSort(array) {
    		if(Object.prototype.toString.call(array).slice(8, -1) === 'Array') {
    			var len = array.length,
    				temp;
    			for(var i = 0; i < len - 1; i++) {
    				for(var j = len - 1; j >= i; j--) {
    					if(array[j] < array[j - 1]) {
    						temp = array[j];
    						array[j] = array[j - 1];
    						array[j - 1] = temp;
    					}
    				}
    			}
    			return array;
    		} else {
    			return 'array is not an Array!';
    		}
    	};
    	var arr = [23, 34, 3, 4, 23, 44, 333, 444];
    	console.log(bubbleSort(arr));
    	//数组,去重
    	function unique(arr) {
    		var hash = [];
    		for(var i = 0; i < arr.length; i++) {
    			if(hash.indexOf(arr[i]) == -1) {
    				hash.push(arr[i]);
    			}
    		}
    		return hash;
    	};
    	var arr2 = [2, 8, 5, 0, 5, 2, 6, 7, 2];
    	console.log(unique(arr2));
    	//数组,数组中出现最多的元素和最多元素的次数,第二多元素和第二多元素的次数
    	function aryMore(arr) {
    		var i;
    		var length = arr.length;
    		var hash = []; //使用哈希数组
    		for(i = 0; i < length; i++) {
    			if(!hash[arr[i]]) hash[arr[i]] = 1; //没有初始化的数组元素为undefined,undefined++为NaN
    			else hash[arr[i]]++;
    		}
    		var max = 0; //最多的次数
    		var maxV; //出现最多的元素
    		var second = 0; //第二多的次数
    		var secondV; //出现第二多的元素
    		hash.forEach(function(item, index) { //forEach函数会跳过空元素
    			if(item > max) {
    				second = max;
    				secondV = maxV;
    				max = item;
    				maxV = index; //用索引来保存原数组的值
    			} else if(item > second) {
    				second = item;
    				secondV = index;
    			}
    		});
    		return {
    			max,
    			maxV,
    			second,
    			secondV
    		};
    	}
    	var arr3 = [2, 2, 2, 2, 3, 4, 5, 4, 3, 1, 4, 4, 100, 100];
    	console.log(aryMore(arr3));
    	//两个数组对比,取出不同的值
    	function getArrDifference(arr1, arr2) {
    		return arr1.concat(arr2).filter(function(v, i, arr) {
    			return arr.indexOf(v) === arr.lastIndexOf(v);
    		});
    	};
    	var arr4 = [0, 1, 2, 3, 4, 5];
    	var arr6 = [0, 44, 6, 1, 3, 9];
    	console.log(getArrDifference(arr4, arr6));
    	//两个数组对比,取出相同的值
    	function getArrEqual(arr1, arr2) {
    		let newArr = [];
    		for(let i = 0; i < arr2.length; i++) {
    			for(let j = 0; j < arr1.length; j++) {
    				if(arr1[j] === arr2[i]) {
    					newArr.push(arr1[j]);
    				}
    			}
    		}
    		return newArr;
    	}
    	var arr7 = [0, 1, 2, 3, 4, 5];
    	var arr8 = [0, 4, 6, 1, 33, 9];
    	console.log(getArrEqual(arr7, arr8));
    	//两个数组,把数组合并,去除相同的值
    	//合并两个数组,去重  
    	function concatAry(arr1, arr2) {
    		//不要直接使用var arr = arr1,这样arr只是arr1的一个引用,两者的修改会互相影响  
    		var arr = arr1.concat();
    		//或者使用slice()复制,var arr = arr1.slice(0)  
    		for(var i = 0; i < arr2.length; i++) {
    			arr.indexOf(arr2[i]) === -1 ? arr.push(arr2[i]) : 0;
    		}
    		return arr;
    	};
    	var arr9 = [0, 1, 2, 3, 4, 5];
    	var arr10 = [0, 4, 6, 1, 3, 9];
    	console.log(concatAry(arr9, arr10));
    
    	//合并多个数组,去重  
    	function concatAryMore(arr1, arr2, arr3) {
    		if(arguments.length <= 1) {
    			return false;
    		}
    		var concat_ = function(arr1, arr2) {
    			var arr = arr1.concat();
    			for(var i = 0; i < arr2.length; i++) {
    				arr.indexOf(arr2[i]) === -1 ? arr.push(arr2[i]) : 0;
    			}
    			return arr;
    		}
    		var result = concat_(arr1, arr2);
    		for(var i = 2; i < arguments.length; i++) {
    			result = concat_(result, arguments[i]);
    		}
    		return result;
    	};
    	var arrMore1 = ['a', 'b'];
    	var arrMore2 = ['a', 'c', 'd'];
    	var arrMore3 = [1, 'd', undefined, true, null];
    	console.log(concatAryMore(arrMore1, arrMore2, arrMore3));
    </script>
    

     数组

    //数组map使用
    	//map() 方法会创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果
    	//例子一
    	const numbers = [1, 2, 3, 4]
    	const numbersPlusOne = numbers.map(n => n + 1);
    	console.log(numbersPlusOne);
    	//例子二
    	const allBlogs = [{
    		title: 'CSS',
    		tags: ['CSS', 'Web']
    	}, {
    		title: 'JavaScript',
    		tags: ['JavaScript', 'Web', 'ES6']
    	}]
    	const allTitles = allBlogs.map(blog => blog.tags)
    	console.log(allTitles)
    
    	//数组filter使用
    	//filter()当你想过滤一个数组时可以使用filter。就像map一样,它接受一个函数作为唯一的参数,该参数在数组的每个元素上调用。这个函数需要返回一个布尔值
    	//例子一
    	const numbers2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    	const oddNumbers = numbers2.filter(n => n % 2 !== 0)
    	console.log(oddNumbers);
    	//例子二
    	const participants = [{
    		id: 'a3f47',
    		username: 'john'
    	}, {
    		id: 'fek28',
    		username: 'mary'
    	}, {
    		id: 'n3j44',
    		username: 'sam'
    	}]
    
    	function removeParticipant(participants, id) {
    		return participants.filter(participant => participant.id !== id)
    	}
    	console.log(removeParticipant(participants, 'a3f47'))
    
    	//数组reduce使用
    	//reduce是数组提供的方法中最难理解的方法,但一旦掌握了该方法,可以做的事情就很多。reduce会取一个数组中的值并将它们合成一个值。它接受两个参数,一个回调函数(reducer函数)和一个可选的初始值(默认情况是数组的第一项)。reducer本身有四个参数:
    	//累计器:它在reducer中累加返回值
    	//数组的当前值
    	//当前索引值
    	//源数组
    
    	var result = [{
    			subject: 'math',
    			score: 88
    		},
    		{
    			subject: 'chinese',
    			score: 95
    		},
    		{
    			subject: 'english',
    			score: 80
    		}
    	];
    	var dis = {
    		math: 0.5,
    		chinese: 0.3,
    		english: 0.2
    	}
    	var sum = result.reduce(function(prev, cur) {
    		return cur.score + prev;
    	}, -10);
    	var qsum = result.reduce(function(prev, cur) {
    		return cur.score * dis[cur.subject] + prev;
    	}, -10)
    	console.log(sum, qsum);
    

      

  • 相关阅读:
    POJ 3669 Meteor Shower(bfs)
    MongoDB 分片的原理、搭建、应用
    Linux下Mongodb安装和启动配置
    目录操作
    一阶段第四次整理(关于滚动条监听的进一步解释)
    HTML DOM 节点介绍(nodeName,nodeValue,nodeType)
    ASP.NET 开发人员应该知道的8个网站
    Java 里快如闪电的线程间通讯
    php-多态
    Winform控件学习-TreeView
  • 原文地址:https://www.cnblogs.com/binmengxue/p/10948685.html
Copyright © 2011-2022 走看看