标签:index new 排序 sort 比较 sam asc script class
1--取出数组1与数组2的共同部分元素
思想1:将数组1放入map中,然后对数组2进行遍历,数组2中的元素在map中不存在时不操作,如果数组2中的元素在map中已经存在,将其push进一个新数组newArr,最后返回该新数组。
function getSameNums(arr1,arr2){
var mp={};
var newArr=[];
for(var i=0;i<arr1.length;i++){
if(!mp[arr1[i]]){
mp[arr1[i]]=1;
}
}
for(var i=0;i<arr2.length;i++){
if(mp[arr2[i]]){
newArr.push(arr2[i]);
}
}
return newArr;
}
var arr1 = [4,2,1,10,5];
var arr2 = [2,3,4,0,10,5];
console.log(getSameNums(arr1,arr2));
思想2:将数组1、数组2进行升序排序,然后分别从头开始遍历,比较。如果相等,将该元素push进一个新数组;如果数组1中的该元素大于数组2中的该元素,将该数组1中的该元素与数组2中的下一个元素进行比较;如果数组1中的该元素小于数组2中的该元素,将该数组1中的下一个元素与数组2中的该元素进行比较
var arr = [];
arr1.sort(sortby);
arr2.sort(sortby);
var i=0;
var j=0;
while(i<arr1.length && j < arr2.length){
if(arr1[i] == arr2[j]){
arr.push(arr1[i]);
i++;
j++;
}else if(arr1[i]>arr2[j]){
j++;
}else{
i++;
}
}
return arr;
}
var arr1 = [4,2,1,10,5];
var arr2 = [2,3,4,0,10,5];
console.log(getSameNums(arr1,arr2));
思想3:将数组1进行升序排序,定义一个全局新数组,然后遍历数组2,利用二分查找判断数组2中的元素是否在数组1中,不在不操作,在的话将其push进一个新数组,最后返回。调用方法,再打印出该新数组。
function sortby(a,b){
return a - b ;
}
var newArr = [];
function binarySearch(arr,findVal,leftIndex,rightIndex){
if(leftIndex>rightIndex){
return ;
}
var midIndex=Math.floor((leftIndex+rightIndex)/2);
var midVal=arr[midIndex];
if(midVal>findVal){
binarySearch(arr,findVal,leftIndex,midIndex-1);
}else if(midVal<findVal){
binarySearch(arr,findVal,midIndex+1,rightIndex);
}else{
newArr.push(findVal)
return ;
}
}
function getSameNums(arr1,arr2){
arr1.sort(sortby);
for(var i=0;i<arr2.length;i++){
binarySearch(arr1,arr2[i],0,arr1.length-1);
}
}
var arr1 = [4,2,1,10,5];
var arr2 = [2,3,4,0,10,5];
getSameNums(arr1,arr2);
console.log(newArr);
标签:index new 排序 sort 比较 sam asc script class
原文地址:http://www.cnblogs.com/haimengqingyuan/p/7058165.html