今天看到一篇文章,主要讲的是为什么你的工作经验不值钱?他里面主要是通过分析一道简单的题目,从五个原则(可用、健壮、可靠、宽容、精益求精)上讲,你的经验值有多少。看了题目我就自己做了一下。题目和思考如下:
编写一个javscript函数 fn,该函数有一个参数 n(数字类型),其返回值是一个数组,该数组内是 n 个随机且不重复的整数,且整数取值范围是 [2, 32]。
题目分析:
1、主要功能:根据参数n返回n项不重复的数组
2、其他考虑:n的范围和类型控制
3、解题思路:
(1)n项随机不重复的数组:先生成一个[2,3...32]的数组,然后随机排序。再根据数组的slice取出相应的项数。
(2)n范围和类型:主要通过判断n typeof 是否等于number类型,就可以排除掉不少number类型和不传值的情况了。另外,数组是要求n个不重复的且值的范围在[2,32],所以这里的n值必须小于31,当然n值要大于0啦。
<!-- 方法fn -->
function fn(n){
var minVal = 2,
maxVal = 32;
// n值检验: n的范围和类型
if (checkVal(n)) {
var sortArray = gnrAndSorArr(minVal, maxVal,n);
return sortArray;
}else{
return []
}
}
<!-- 检验方法 -->
function checkVal(n){
if (typeof n !== 'number') {
alert('请传入数字!');
return false;
}
if (n < 1 || n > 31) { // 整数取值范围是 [2, 32],且不重复,则n的取值只能1-31
alert('请输入1-31范围的n值');
return false;
}
if (!/^\d+$/.test(n)){
alert("不是整数");
return false;
}
return true;
}
<!-- 生成和排序数组的方法 -->
function gnrAndSorArr(minVal, maxVal,n){
var arr = new Array(),
reqArr = [];
for (var index = minVal; index <= maxVal; index++) {
arr.push(index);
}
arr.sort(function () {
return 0.5 - Math.random();
});
reqArr = arr.slice(0, n);
return reqArr;
}
文章说,现在假设你的工作时间为 y 年,经验系数默认为 1,即工作经验是:Y = 1 * y。从现在开始,以下的错误,你要是遇到了,请自行调整经验系数。假设我满1年工作经验,乘以y,连1都没有o(╥﹏╥)o,我的代码估计只剩下可用这个层面了。。
不过,有些考虑是要分场合和需求。在写的时候,我会想用户输入的n不同类型值,相对应不同的提示,或者允许n的最大错误范围是到哪里?
最后,附上文章的链接:https://mp.weixin.qq.com/s/Rw_D3dSVfU3vB-5izneX4g