刚看到一个小小的js题,就当练练手了.害怕自己被安逸所杀死.....
------- 题记
复制代码
如题:有一个大数组,var a = ['1','2','3',...] a的长度是100,内容填充随机整数的字符串,请先构造此数组a ,然后实现去重
分析: 首先了解的信息是此数组的长度是100, 那就是lengtn为100,内容是随机数 那就 循环100次填充随机数呗! 但是有个问题就是 内容是随机整数字符串,那么 这些数据的范围是多少呢?
解决思路:既然不确定范围,又遵循着封装的思想 那么就将产生随机数的功能封装成一个函数,要产生多少个就循环多少次调用,由于数组内容是字符串的形式 所以要将产生的随机数抓换为字符串的形式, 关于去重应该是ES6的set方法了.但是个人更加喜欢用算法的原理来实现,由于排序可以是升序和降序所以也要考虑
(顺便再实现个排序的功能)
代码如下:
function randNum(min, max) {
//产生随机数的方法 数据范围的最小值 和 最大值 比如要1到10的数据 那就传入1,10
return parseInt(Math.random() * (max - min) + min);
}
//数组去重
function noRepeat(arr) {
var hash = {};
var newArr = [];
arr.forEach((ar, i) => {
if(!hash[ar]) {
hash[ar] = true;
newArr.push(ar);
}
})
return newArr;
}
//实现排序
function paiXu(arr, code) {
if(code == 1) {
arr.sort(minish)
}
if(code == 0) {
arr.sort(magnify)
}
}
<!--降序-->
function minish(value1, value2) {
return value1 - value2
}
<!--增序-->
function magnify(value1, value2) {
return value2 - value1
}
var arr = [];
for(let i = 0; i < 100; i++) {
var nums = randNum(1, 10);
arr.push(nums.toString());
}
var newArr2 = noRepeat(arr);
console.log(newArr2);
paiXu(newArr2,1);
console.log(newArr2);
复制代码
有那么点封装的意思,个人比较喜欢这样写,这样重用率会高那么一点,第一次写文章请多多执教!