有1到10w这个10w个数,去除2个并打乱次序,如何找出那两个数

时间:2022-05-30 11:08:20

一、此方法性能不太好 耗时 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);