核心提示:公共项查找---02_多个数组查找子项。scriptvar arr_arr = [[3,8,5,3],[1,9,4,3,6,7,5,2],[3,4,5],[5,6,7,3]];//公共子项 3 , 5...
公共项查找---02_多个数组查找子项。
<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>