公共項查詢---04_多個數組查詢子字串
阿新 • • 發佈:2018-12-26
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
/*
* 實現過程:
* 1.將arr_str的每一項按照長度升序排列
* 2.找到最短的一項,然後將它的所以子項全部羅列出來,形成一個arrAll陣列
* 3.用正則與arr_str剩下的三項進行匹配,形成一個二維陣列,類似[[a,a,a], [b,b,b]]
* 4.遍歷這個二維陣列,如果其中的子項(陣列)的長度 = arr_str.length,
* 那麼找出子項中第一個最長的那個字串
*
* */
var arr_str = ['asdshow','helloshow','showhi','hahashowhehe']; //show
function find(arr) {
// 1.將arr_str的每一項按照長度升序排列
arr.sort(function (a, b) {
return a.length - b.length;
});
//console.log(arr);
// 2.找到最短的一項,然後將它的所以子項全部羅列出來,形成一個arrAll陣列
let strArr = [];
let firstStr = arr.shift(); // showhi
//console.log(firstStr);
for ( let i = 0; i < firstStr.length; i++ ) {
for ( let j = i + 1; j <= firstStr.length; j++ ) {
strArr.push( firstStr.substring(i, j) );
}
}
//console.log(strArr); // s,sh,sho,show,showh,showhi,h,ho....
// 3.用正則與arr_str剩下的三項進行匹配,形成一個二維陣列,類似[[a,a,a], [b,b,b]]\
var count = 0; // 最長的字串的長度
var result = ''; // 最長的字串
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 reArr = arr[j].match(re);
if (reArr) {
wholeArr = wholeArr.concat(reArr);
}
}
// 遍歷新陣列,如果其中的子項(陣列)的長度 = arr_str.length,
// 找出子項中第一個最長的那個字串
if ( wholeArr.length === arr.length ) {
//console.log(wholeArr);
if ( wholeArr[0].length > count ) {
count = wholeArr[0].length;
result = wholeArr[0];
}
}
}
return result;
}
console.log(find(arr_str));
</script>
</body>
</html>