1. 程式人生 > >公共項查詢---02_多個數組查詢子項

公共項查詢---02_多個數組查詢子項


<!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>