将一段数字转换为100的一部分
Convert a range of numbers to portion of 100
我有一个数字列表(任何长度),范围从0到100,包括重复项。我需要把这些数字转换成100的部分。
例如:[25,50]变成[33.333,66.666]
[25,50,50]变成[20,40,40]
什么算法最适合这个?
您需要计算数组中值的总和-然后您可以将数组中的每个值除以该总和,然后乘以100。
试试这个:
console.log(33.333 - 33.333 % 25); // 50
%是模运算符。
Number.prototype.range = function(a) {
return this - this % a;
}
console.log((33.333).range(25)); // 25;
console.log((66.666).range(25)); // 50;
在数组中使用map:
console.log([33.333, 66.666].map(function(a) {
return a.range(25);
}));
演示这可以通过计算数组的和,然后除以每个值来完成。它可以很容易地使用Array.reduce
求和和Array.map
来创建一个具有最终输出的新数组。下面是一个例子:
var arr1 = [25, 50];
var arr2 = [25, 50, 50];
function proportion(arr) {
var sum = arr.reduce(function(prev, cur){
return prev + cur;
});
var result = arr.map(function(val){
return (val/sum)*100;
});
return result;
}
console.log(proportion(arr1)); // [33.33333333333333, 66.66666666666666]
console.log(proportion(arr2)); // [20, 40, 40]
JSBin here: http://jsbin.com/texuc/1/edit
解决这个问题的最简单方法是对数组求和,找到每个值作为该和的一个分数,然后乘以100。
这段代码应该能达到目的。
var inputArray = [25, 50, 50];
var outputArray = [];
var total = 0;
for (var i=0; i<(inputArray.length); i++) {
total += inputArray[i];
}
for (var i=0; i<(inputArray.length); i++) {
outputArray[i] = ((inputArray[i])/total) * 100;
}
相关文章:
- 如何在JavaScript中将字符串转换为函数引用
- 如何在Javascript中将JSon对象转换为数组
- 使用JS将数组转换为json对象
- 如何使用json将对象列表从java转换为javascript
- 偶尔结结巴巴地说“;堆叠的”;translate()上的转换(v4.0.0-alpha40)
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 在Javascript中转换对象数组
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- 将数字转换为一定数量的硬币
- 如何将json响应的一部分转换为map
- 将字符串的一部分转换为DataTables的JSON
- xml文件的一部分转换为javascript数组
- 将一段数字转换为100的一部分
- 如何将一部分CSS代码转换为JavaScript/jQuery
- 如何转换网页的一部分,并创建一个风格和格式的PDF在飞行
- 在使用Javascript作为XSLT转换的一部分时如何传递参数
- 如何使用jquery提取要转换的XML文档的一部分(xslt) ?
- 取字符串的一部分,并从十六进制转换为文本javascript
- 将ArrayBuffer的一部分转换为字符串
- 在angular js中,如何将json对象作为状态转换的一部分发送到另一个控制器