Javascript 规范化对象中的数字
将对象中的数字规格化为0-1或0-100的最佳方法是什么 例如: 期望结果-Javascript 规范化对象中的数字,javascript,object,numbers,normalize,Javascript,Object,Numbers,Normalize,将对象中的数字规格化为0-1或0-100的最佳方法是什么 例如: 期望结果- obj = { "key1": 0.1, "key2": 0.5, "key3": 1 } 我可以用- ratio = Math.max.apply(Math, numbers) / 100; numbers = numbers.map(function (v) { return Math.round(v / ratio); }); 但是,如果数字在一个对象中,那么规范化的最佳方法是什么呢?
obj = {
"key1": 0.1,
"key2": 0.5,
"key3": 1
}
我可以用-
ratio = Math.max.apply(Math, numbers) / 100;
numbers = numbers.map(function (v) {
return Math.round(v / ratio);
});
但是,如果数字在一个对象中,那么规范化的最佳方法是什么呢?这相当容易做到——在对象中循环并变换范围,下面是一些伪代码:
var applyToRange = function (num, source, destination) {
if (num < source[0] || num > source[1]) {
return NaN;
}
var oldMinValue = source[0];
var oldMaxValue = source[1];
var newMinValue = destination[0];
var newMaxValue = destination[1];
var a = (oldMaxValue - oldMinValue);
var b = (newMaxValue - newMinValue);
return ((num - oldMinValue) / a) * b + newMinValue;
}
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
// applyToRange();
}
}
您需要知道对象中的最小值和最大值,才能使此特定方法起作用。如何
obj = {
"key1": 100,
"key2": 500,
"key3": 1000
}
console.log(JSON.stringify(obj, null, 4));
for (var p in obj){
if (obj.hasOwnProperty(p)){
obj[p] /= 0.42;
}
}
console.log(JSON.stringify(obj, null, 4));
{
键1:100,
键2:500,
键3:1000}{
键1:238.0952380952381,
键2:1190.4761904761906,
键3:2380.952380952381}
如果当前的lodash 3.10是一个选项,可以用非常简洁的方式编写:
var obj = {
"key1": 100,
"key2": 500,
"key3": 1000
}
var max = Math.max.apply(Math, _.values(obj))
obj = _.mapValues(obj, function(val) {
return val / max;
})
此脚本将此间隔[100,1000]中的给定值移动到所需的间隔[0,1]。计算的基础是斜率m和一些修正值 var obj={ 键1:100, 键2:500, 键3:1000 }, 范围=[0,1], 我 最小值,最大值, M 值=[]; 因为我在obj{ pushobj[i]; obj[i]={value:obj[i]}; } min=Math.min.applyMath,值; max=Math.max.applyMath,值; m=范围[1]-范围[0]/最大-最小; 因为我在obj{ obj[i]。归一化=obj[i]。值-min*m+范围[0]; }
文件。书写;试一试到底有多难?范围是0。。。1不符合您想要的结果。
var obj = {
"key1": 100,
"key2": 500,
"key3": 1000
}
var max = Math.max.apply(Math, _.values(obj))
obj = _.mapValues(obj, function(val) {
return val / max;
})