一、此方法性能不太好 耗时 400ms
//有1到10w这个10w个数,去除2个并打乱次序,如何找出那两个数? var arrA = []; var arrB = []; var arrC = []; var arrD = []; //求出A数组的值 for(var i = 0; i < 10000; i++) { arrA.push(i); } //A排序 arrA.sort(function(a, b) { return Math.random() - 0.5 }) //求出B数组的值,并比较A/B两个数组,如果A数组里有B数组里的数,把这些数放大到C数组中 for(var i = 0; i < arrA.length - 2; i++) { arrB[arrA[i]] = arrA[i]; //console.log(arrB); if(arrB.indexOf(arrA[i]) > -1) { arrC.push(arrA[i]); //console.log(arrC); } } // 在比较C/A两个数组,把B数组里面没有的数放到D数组中,没有的项即为抽出的数 for(var i = 0; i < arrA.length; i++) { if(arrC.indexOf(arrA[i]) == -1) { arrD.push(arrA[i]); //console.log(arrD); } } // console.log(arrA); // console.log(arrB); // console.log(arrC); console.log(arrD);
二、此方法简便,易懂,耗时少 大概50ms
var arrA = []; var arrB = []; var arrC = []; //求出A数组的值 for(var i = 0; i < 10000; i++) { arrA.push(i); } //A排序 arrA.sort(function(a, b) { return Math.random() - 0.5 }) //求出B数组的值 for(var i = 0; i < arrA.length - 2; i++) { arrB[arrA[i]] = arrA[i]; //console.log(arrB); }
//如果B数组里的第i项为undefind,打印出i放在arrC for(var i = 0; i<arrB.length; i++){ if(arrB[i] == undefined){ arrC.push(i); } }
console.log(arrC);