公共項查詢---02_多個數組查詢子項
阿新 • • 發佈:2018-12-26
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
var arr_arr = [[3,8,5,3],[1,9,4,3,6,7,5,2],[3,4,5],[5,6,7,3]]; //公共子項 3 , 5
/*
* 演算法:
* 1.先去重,然後將數組合併為一個數組
* 2.將合併的陣列進行遍歷,把單個數字形成一個數組,例如[3,3,3,3]
* 3、然後取出 數字陣列的長度 === arr_arr.length的頭一項
* */
function find(arr){
// 儲存公共子項
let result = [];
// 合併為大陣列
let bigArr = [];
// 遍歷最外圍陣列, 合併為大陣列
arr.forEach(function (ele) {
// 這時的ele依然是個陣列,例如[3,8,5]
// 1.去重,合併為一個大陣列
unique(ele).forEach(function (num) {
bigArr.push(num);
});
});
// 2.將合併的陣列進行遍歷,把單個數字形成一個數組,例如[3,3,3,3]
// 從大陣列中取出每一個值,形成陣列
let obj = {};
bigArr.forEach(function (num) {
if ( !obj[num] ) {
obj[num] = [num];
} else {
obj[num].push(num);
}
});
//console.log(obj);
// 3、然後取出 數字陣列的長度 === arr_arr.length的頭一項
for ( let attr in obj ) {
if ( obj[attr].length === arr.length ) {
result.push(Number(attr));
}
}
//console.log(result);
return result;
}
/*
* 陣列去重
* */
function unique(arr){
// 去重後的陣列
let result = [];
let obj = {};
// 遍歷陣列
arr.forEach(function (ele) {
if ( !obj[ele] ) {
obj[ele] = 1;
result.push(ele);
}
});
return result;
}
console.log(find(arr_arr));
</script>
</body>
</html>