-
数组去重
var arr = [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5] 处理完毕后的 arr === [1, 2, 3, 4, 5]
答
// 1. 遍历数组, 拿到数组的每一项
for (var i = 0; i < arr.length; i++) {
// 2. 判断数组内, 除了当前项之外, 后续有没有与当前项相同的值
if (arr.indexOf(arr[i], i + 1) !== -1) { // 如果当前分支条件成立, 那么代表数组后续一定有与当前重复的值
arr.splice(i, 1) // 分支成立时, 将当前项删掉, 达到去重的目的
i-- // 直接使用 splice 会出现 数组塌陷的情况, 会导致去重无法清除干净, 加上 i--, 解决数组塌陷
}
}
console.log('去重后的数组: ', arr)
2. 封装一个函数, 函数返回一个 0~10 之间的
function fn() {
// 求 0~10之间的 随机整数
var fnNum1 = Math.random() // 得到了一个随机数, 但是区间为 0~1
var fnNum2 = fnNum1 * (10 + 1) // 得到了一个随机数, 区间为 0~10之间的
var fnNum3 = Math.floor(fnNum2) // 通过四舍五入, 将这个随机数改变为 随机整数
/**
* 当前 四舍五入的形式有问题, 我们现在要么改为向上取整, 要么改为向下取整
*
* 如果说 使用向上取整, 数字应该计算为: -0.999~9.999 向上取整后为 0~10
*
* 如果说 使用向下取整, 数字应该计算为: 0~10.999 向下取整后为 0~10
*
* 通过分析认为 向下取整比较好计算, 所以我们的 取整方式更改为 向下取整
* 计算公式 Math.floor(随机数 * (10 + 1))
*
* 目前的 随机数取证方式为 向下取整
* 0~0.999 0
* 1~1.999 1
* 2~2.999 2
* ...
* 9~9.999 9
* 10~10.999 10
*/
return fnNum3
}
概率
/**
* 目前 随机数取整的方式为 四舍五入
*
* 0~0.499 -> 0
* 0.5~1.499 -> 1
* 1.5~2.499 -> 2
* ...
* 8.5~9.499 -> 9
* 9.5~9.999 -> 10
*/
var num = fn()
console.log('num 是一个随机数: ', num)
var obj = {}
for (var i = 0; i <= 100000; i++) {
var sum = fn() // 1. 循环开始 先拿到随机数的值
if (obj[sum] === undefined) {
obj[sum] = 1 // 代表 当前这个随机数 第一次出现
} else {
obj[sum]++ // 如果执行的是 else 分支, 表明 sum 不是第一次出现, 具体出现的次数我们不知道, 所以直接让他的属性值自增1 就行
}
}
console.log(obj)