之前一直想寫個產生隨機數組的方法,現在終於做了。向封裝好的方法傳入四個參數:數組最小長度、數組最大長度、數組元素最小值、數組元素最大值。調用產生數組的方法後,再用同一命名空間內的結果數組獲取結果就行。
下面上硬硬的乾貨(100%源代碼,揭示了整個"過程"-_^||):
////Version Zero
////粗糙版本,提供了生成隨機數組(最大長度7、數組元素最大值7)的功能,但代碼不好複用,全局變量太多,子函數太分散。
////功能性符合需求,魯棒性(健壯性)、可擴展性、可維護性、靈活性、複用性都不高
//var arrRandomNums = [];
//var maxShowNum = getRandCount();
//function getRandCount() {
// var num = parseInt(Math.random() * 10);
// return num > 7 ? 7 : num;
//}
//var generateRamdonNumber = function (count) {
// var rand = parseInt(Math.random() * 10);
// if (rand > 7) {
// return false;
// }
// for (var i = 0; i < arrRandomNums.length; i++) {
// if (arrRandomNums[i] == rand) {
// return false;
// } else {
// }
// }
// arrRandomNums.push(rand);
//}
//var needReason = function () {
// for (var i = 0; ; i++) {
// if (arrRandomNums.length < maxShowNum) {
// generateRamdonNumber(maxShowNum);
// } else {
// break;
// }
// }
//}
//$(document).ready(function () {
// $('#btnNeedReason').on('click', function () {
// maxShowNum = getRandCount();
// arrRandomNums = [];
// needReason();
// $('#testFun input[name="cbcShowCols"]').each(function (ind) {
// var isShow = false;
// for (var i = 0; i < arrRandomNums.length; i++) {
// if (arrRandomNums[i] == ind) {
// isShow = true;
// i = arrRandomNums.length;
// }
// }
// $(this).prop('checked', isShow);
// });
// });
// $('#btnFilterCols').on('click', function () {
// var currentSelectShowCols = [];
// $('#testFun input[name="cbcShowCols"]:checked').each(function (ind) {
// currentSelectShowCols.push($(this).val());
// });
// var strCols = currentSelectShowCols.join('-');
// $.post(
// '/UserDashboard/ChangeShowColumn',
// {
// showCol: strCols
// }, function (res) {
// if (res.slt.toLowerCase() == 'true') {
// //alert(res.msg);
// window.location.reload(true);
// } else {
// alert('error' + res.msg);
// }
// }
// );
// });
//});
////Version One percent five
//嘗試在一個獨立namespace內,用閉包產生一組長度、大小不固定的隨機數組,沒成功!!!!
//(function () {
// var _NS = function () {
// }
// _NS.prototype.alert = function () {
// alert('900');
// return 900;
// }
// window.NS = new _NS();
//})();
//(function () {
// this.arrRandomNums = [];
// this.maxShowNum = 900;
// this.myfunction = function () {
// alert(maxShowNum);
// return maxShowNum;
// }
// window.GetRandomArray = this;
//})();
//var GetRandomArray = {
// arrRandomNums: [],
// maxShowNum : 0,
// myfunction : function () {
// alert(maxShowNum);
// }
//}
////Version One
////依據單一原則,開閉原則,將分散的函數合併到一起
////數據倉儲data warehouse
//var DataInfoMining = {
// randomNums: [2, 1, 3, 2, 1, 3]
//};
//方法
//var tryGenerateRandomArr = function (maxShowNum, numMaxValue) {
// var arrRandomNums = [];
// //console.log('maxShowNum : ' + maxShowNum + 'numMaxValue : ' + numMaxValue);
// //獲取隨機數
// var getSingleRandNum = function (maxValueLimit) {
// var num = parseInt(Math.random() * 10);
// return num > maxValueLimit ? maxValueLimit : num;
// };
// var ShowNums = getSingleRandNum(maxShowNum);
// //動態生成隨機數組
// var needReasonWhyCheckBoxNotClick = function () {
// arrRandomNumsLocal = [];
// for (var i = 0; i < ShowNums; i++) {
// var RandNumber = getSingleRandNum(numMaxValue);
// arrRandomNumsLocal.push(RandNumber);
// }
// return arrRandomNumsLocal;
// }
// arrRandomNums = needReasonWhyCheckBoxNotClick();
// //for (var i = 0; i < arrRandomNums.length; i++) {
// // console.log('get arrRandomNums[' + i + '] : ' + arrRandomNums[i]);
// //}
// return arrRandomNums;
//}
//window.onload = function () {
// DataInfoMining.randomNums = tryGenerateRandomArr(8, 3);
// for (var i = 0; i < DataInfoMining.randomNums.length; i++) {
// console.log('get arrRandomNums[' + i + '] : ' + DataInfoMining.randomNums[i]);
// }
//};
//$(document).ready(function () {
// $('#btnNeedReason').on('click', function () {
// var arrRandomNums = DataInfoMining.randomNums;
// $('#testFun input[name="cbcShowCols"]').each(function (ind) {
// var isShow = false;
// for (var i = 0; i < arrRandomNums.length; i++) {
// if (arrRandomNums[i] == ind) {
// isShow = true;
// i = arrRandomNums.length;
// }
// }
// $(this).prop('checked', isShow);
// });
// });
// $('#btnFilterCols').on('click', function () {
// var currentSelectShowCols = [];
// $('#testFun input[name="cbcShowCols"]:checked').each(function (ind) {
// currentSelectShowCols.push($(this).val());
// });
// var strCols = currentSelectShowCols.join('-');
// $.post(
// '/UserDashboard/ChangeShowColumn',
// {
// showCol: strCols
// }, function (res) {
// if (res.slt.toLowerCase() == 'true') {
// //alert(res.msg);
// window.location.reload(true);
// } else {
// alert('error' + res.msg);
// }
// }
// );
// });
//});
////Version Two
////數據和方法封裝在一個命名空間內,防止namespace pollution和便於管理(比如維護、擴展)
//var DataInfoMining = {
// randomNums: [1, 3, 1, 4, 6, 6, 6, 2, 1, 3, 2, 1, 3],
// tryGenerateRandomArr: function (maxShowNum, numMaxValue) {
// try {
// //獲取隨機數
// var getSingleRandNum = function (maxValueLimit) {
// var num = parseInt(Math.random() * 10);
// return num > maxValueLimit ? maxValueLimit : num;
// };
// //數組長度隨機,但不超過最大值maxShowNum
// var ShowNums = getSingleRandNum(maxShowNum);
// //動態生成隨機數組
// var needReasonWhyCheckBoxNotClick = function (outsideShowNum) {
// DataInfoMining.randomNums = [];
// for (var i = 0; i < 1000; i++) {
// //數組元素值不超過最大值numMaxValue
// var RandNumber = getSingleRandNum(numMaxValue);
// //數組元素是否重複
// var isReperatValue = false;
// var len = DataInfoMining.randomNums.length;
// for (var j = 0; j < len; j++) {
// if (DataInfoMining.randomNums[j] == RandNumber) {
// isReperatValue = true;
// j = len;
// }
// }
// //數組長度是否達到要求,達到要求退出
// var isGetAndLeave = false;
// if (!isReperatValue) {
// DataInfoMining.randomNums.push(RandNumber);
// //滿足數組長度後退出
// if (DataInfoMining.randomNums.length == outsideShowNum) {
// isGetAndLeave = true;
// }
// }
// if (isGetAndLeave) {
// console.debug('current i : ' + i);
// break;
// }
// }
// }
// //!!!!ShowNums無法在needReasonWhyCheckBoxNotClick內自動獲取到,只能通過形參傳進方法內
// needReasonWhyCheckBoxNotClick(ShowNums);
// //console.log('maxShowNum : ' + maxShowNum + 'numMaxValue : ' + numMaxValue);
// //for (var i = 0; i < DataInfoMining.randomNums.length; i++) {
// // console.log('get arrRandomNums[' + i + '] : ' + DataInfoMining.randomNums[i]);
// //}
// } catch (e) {
// console.error(e + '====' + e.message);
// }
// }
//};
//Version Three
////之前數組長度和元素值,只有最大值限制(maxShowLen\numMaxValue),現在增加最小值限制
//數據和方法封裝在一個命名空間內,防止namespace pollution和便於管理(比如維護、擴展)
var DataInfoMining = {
randomNums: [1, 3, 1, 4, 6, 6, 6, 2, 1, 3, 2, 1, 3],
tryGenerateRandomArr: function (minShowLen, maxShowLen, numMinValue, numMaxValue) {
try {
//獲取隨機數
var getSingleRandNum = function (minValueLimit, maxValueLimit) {
var num = parseInt(Math.random() * 10);
//num = num > maxValueLimit ? maxValueLimit : num;
return num < minValueLimit ? minValueLimit : num > maxValueLimit ? maxValueLimit : num;
};
//數組長度隨機,但不超過最大值maxShowLen
var ShowNums = getSingleRandNum(minShowLen, maxShowLen);
//動態生成隨機數組
var needReasonWhyCheckBoxNotClick = function (outsideShowNum) {
DataInfoMining.randomNums = [];
for (var i = 0; i < 1000; i++) {
//數組元素值不超過最大值numMaxValue
var RandNumber = getSingleRandNum(numMinValue, numMaxValue);
//數組元素是否重複
var isReperatValue = false;
var len = DataInfoMining.randomNums.length;
for (var j = 0; j < len; j++) {
if (DataInfoMining.randomNums[j] == RandNumber) {
isReperatValue = true;
j = len;
}
}
//數組長度是否達到要求,達到要求退出
var isGetAndLeave = false;
if (!isReperatValue) {
DataInfoMining.randomNums.push(RandNumber);
//滿足數組長度後退出
if (DataInfoMining.randomNums.length == outsideShowNum) {
isGetAndLeave = true;
}
}
if (isGetAndLeave) {
console.debug('current i : ' + i);
break;
}
}
}
//!!!!ShowNums無法在needReasonWhyCheckBoxNotClick內自動獲取到,只能通過形參傳進方法內
needReasonWhyCheckBoxNotClick(ShowNums);
//單元測試、持續集成測試Test Drive Developing(TDD)
//console.log('maxShowLen : ' + maxShowLen + 'numMaxValue : ' + numMaxValue);
//for (var i = 0; i < DataInfoMining.randomNums.length; i++) {
// console.log('get arrRandomNums[' + i + '] : ' + DataInfoMining.randomNums[i]);
//}
} catch (e) {
console.error(e + '====' + e.message);
}
}
};
//window.onload = function () {
// console.log(console.time('========time profile========'));
// DataInfoMining.tryGenerateRandomArr(8, 8);
// //DataInfoMining.randomNums = tryGenerateRandomArr(8, 8);
// console.trace('after creating trace: ');
// console.debug('after creating debug: ');
// console.hasOwnProperty('log');
// console.hasOwnProperty('test');
// console.info('after creating info: ');
// console.assert(true, 'after creating info: ');
// for (var i = 0; i < DataInfoMining.randomNums.length; i++) {
// console.log('arrRandomNums[' + i + '] : ' + DataInfoMining.randomNums[i]);
// }
// console.log(console.time('========time profile========'));
//};
$(document).ready(function () {
$('#btnNeedReason').on('click', function () {
DataInfoMining.tryGenerateRandomArr(1, 4, 4, 7);
var arrRandomNums = DataInfoMining.randomNums;
$('#testFun input[name="cbcShowCols"]').each(function (ind) {
var isShow = false;
for (var i = 0; i < arrRandomNums.length; i++) {
if (arrRandomNums[i] == ind) {
isShow = true;
i = arrRandomNums.length;
}
}
$(this).prop('checked', isShow);
});
});
$('#btnFilterCols').on('click', function () {
var currentSelectShowCols = [];
$('#testFun input[name="cbcShowCols"]:checked').each(function (ind) {
currentSelectShowCols.push($(this).val());
});
var strCols = currentSelectShowCols.join('-');
$.post(
'/UserDashboard/ChangeShowColumn',
{
showCol: strCols
}, function (res) {
if (res.slt.toLowerCase() == 'true') {
//alert(res.msg);
window.location.reload(true);
} else {
alert('error' + res.msg);
}
}
);
});
});
文件傳送門:http://download.csdn.net/detail/changshenglugu/9107333