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 冒泡法排序