1. 将一个指定整数值等分成指定的数量,最终返回这个能被等分的整数值
/** * @param {Number} * @return {Number} */ function intervalHandle (num, num_interval) { if (indexOfHandle(num, num_interval)) { return num } else { for (var i = 0; i <= num_interval; i++) { var num_new = num num_new += i; if (indexOfHandle(num_new, num_interval)) { return num_new } } } function indexOfHandle(x, y) { return String((x / y)).indexOf('.') === -1 } } intervalHandle(1999, 10) // => 2000 // intervalHandle(给定的值, 要等分的个数) // 利用场景: 图表x/y轴计算最大值和距离值
2. 判断一个数是不是质数/素数
概念:
- 质数又称素数。一个大于 1 的自然数,除了 1 和它本身外,不能被其余自然数整除的数叫做质数;否则称为合数。
0 和 1 既不是质数也不是合数,最小的质数是 2
/** * @param {Number} * @return {Number} */ function isPrime(num) { if (num <= 3) return n > 1 let sqrt = parseInt(Math.sqrt(num)) for (let i = 2; i <= sqrt; i++) {if (num % i === 0) { return false} } return true}console.log(isPrime(10)) // => false
3. 计算两个数字之间的间断值(输出1,4 =>输入1,2,3,4)
function continuousValue(numStart,numEnd){ let a=parseInt(numStart); let b=parseInt(numEnd); let c = []; if (numStart - b < 0) { const number = Math.abs(a - b) + 1; for (let i = a; i < a + number; i++) { c.push(i); } } else if (a - b === 0) { c.push(a) } else if (a - b > 0) { const number = Math.abs(a - b); for (let i = a; i > number; i--) { c.push(i); } } return c.join(','); } continuousValue(1,5) // => '1,2,3,4,5'
4. 计算一组数值中每个数值的占比(百分比%)
/** * @description: 占比算法(最大余额法) * @param {Array} valueList 要计算的数组 * @param {index} idx 要计算数组中值的下表 * @param {number} precision 百分比保留几位小数 */function getPercentValue(valueList, idx, precision) { if (!valueList[idx]) { return 0; } var sum = valueList.reduce(function(acc, val) { return acc + (isNaN(val) ? 0 : val); }, 0); if (sum === 0) { return 0; } var digits = Math.pow(10, precision); var votesPerQuota = valueList.map(function(val) { return (isNaN(val) ? 0 : val) / sum * digits * 100; }); var targetSeats = digits * 100; // 再向下取值,组成数组 var seats = votesPerQuota.map(function(votes) { return Math.floor(votes); }); var currentSum = seats.reduce(function(acc, val) { return acc + val; }, 0); var remainder = votesPerQuota.map(function(votes, idx) { return votes - seats[idx]; }); while (currentSum < targetSeats) { var max = Number.NEGATIVE_INFINITY; var maxId = null; for (var i = 0, len = remainder.length; i < len; ++i) { if (remainder[i] > max) { max = remainder[i]; maxId = i; } } // 对最大项余额加1 ++seats[maxId]; remainder[maxId] = 0; ++currentSum; } // 总数占比100% return seats[idx] / digits;}// 调用let a = [1,2]let result = [];a.forEach((v, i) => {result.push(getPercentValue(a, i, 0))});console.log(result) // [33, 67]