JS寻找公共项

11 篇文章 0 订阅

1 当只有两项时,遍历两个循环就可以了

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
<script>
var arr_arr = [[3,8,5],[1,9,4,3,6,7,5,2]];  //公共子项 3 , 5
function showCommon(){
	var arr1 = unique(arr_arr[0]);
	var arr2 = unique(arr_arr[1]);
	var result = [];
	for(var i = 0; i <arr1.length;i++){
		for(var j =0; j<arr2.length; j++){

			if(arr1[i] == arr2[j]){
				result.push(arr1[i]);
			}

		}
	}
	return result;
}
var a = showCommon();
console.log(a);

//var a = unique([1,23,34,4,5,6,7,2,4,5,6]);

function unique (arr){
	var json = {};
	var result = [];
	if(arr.length<=1) return arr;
	for(var i =0; i< arr.length; i++){
		if(typeof json[arr[i]] == 'undefined'){
			json[arr[i]] = true;
			result.push(arr[i]);
		}
	}
	return result;
}
</script>
</head>
<body>
</body>
</html>

2 当数组有多项时

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
<script>
var arr_arr = [[3,8,5],[1,9,4,3,6,7,5,2],[12,46,8,5]];  //公共子项  , 5
function showCommon(arr){
	var result = [];
	var newArray = [];
	var json = {};
	for(var i =0; i<arr.length; i++){
		newArray = newArray.concat(arr[i]);
	}

	for(var j = 0 ; j<newArray.length;j++){
		if(typeof json[newArray[j]] == 'undefined'){
			json[newArray[j]] = [newArray[j]];
		}else{
			json[newArray[j]].push(newArray[j]);
		}
	}
	for(var z in json){
		if(json[z].length == arr.length){
			result.push(json[z][0])
		}
	}
	return result;
}
var a = showCommon(arr_arr);
console.log(a);
</script>
</head>
<body>
</body>
</html>
原理: 将数组合并,利用JSON,如果一个JSON有项数等于数组原来的长度,表示每项都有这个项
</pre>3 寻找相同字符串<p></p><p></p><pre code_snippet_id="1580491" snippet_file_name="blog_20160217_5_9659972" name="code" class="html"><!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
<script>
var arr_arr = ['abcshowfdfa','showd12fd'];  //公共子项 3 , 5
function showStr(arr){
	var str1 = arr[0];
	var str2 = arr[1];
	var result = '';
	var count = 0;
	var index = 0;
	for(var i = 0; i <str1.length;i++){
		for(var j =0; j<str2.length; j++){
			if(str1.charAt(i) == str2.charAt(j)){
				var k = 1;
				while(str1.charAt(i+k) == str2.charAt(j+k)){
					k++
					if(k>count){
						count = k;
						index = i;
					}
				}
			}
		}
	}
	return str1.substr(index,count);
}
console.log(showStr(arr_arr)) ;



</script>
</head>
<body>
</body>
</html>
</pre>4 寻找多个字符串<p></p><p></p><pre code_snippet_id="1580491" snippet_file_name="blog_20160217_7_7565638" name="code" class="html">
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
<script>
var arr = ['abcshowfdfa','showd','adfshowdfd','afdshow'];  //公共子项 3 , 5
function showStr(arr){
	var arr = sortFn(arr);
	var firstArr = arr.shift();
	var strArr = [] ;
	var count = 0;
	var result = '';
	for(var i = 0; i < firstArr.length; i++){
		for( var j = i + 1; j <= firstArr.length; j++){
			strArr.push(firstArr.substring(i,j))
		}
	}
	for(var i = 0; i < strArr.length; i++){
		var wholeArr = [];
		var re = new RegExp(strArr[i]);
		for(var j = 0; j < arr.length; j++){
			var ret = arr[j].match(re);
			if(ret){
				wholeArr = wholeArr.concat(ret);
			}
		}
		if(wholeArr.length == arr.length){
			if(wholeArr[0].length > count){
				count = wholeArr[0].length;
				result = wholeArr[0];
			}
		};
	}
	return result;
}
function sortFn (arr) {
	arr.sort(function(arr1,arr2){
		return arr1.length - arr2.length;
	})
	return arr;
}
console.log(showStr(arr));
</script>
</head>
<body>
</body>
</html>
原理: 先把最短的项抽出来,然后分解成字符串组合,如'abc' 分解成 'a' 'ab' 'abc' 'b' 'bc' 'c' ,然后利用正则匹配

5 冒泡法排序


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值