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]