Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 规范化对象中的数字_Javascript_Object_Numbers_Normalize - Fatal编程技术网

Javascript 规范化对象中的数字

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); }); 但是,如果数字在一个对象中,那么规范化的最佳方法是什么呢?

将对象中的数字规格化为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);
});

但是,如果数字在一个对象中,那么规范化的最佳方法是什么呢?

这相当容易做到——在对象中循环并变换范围,下面是一些伪代码:

  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;
})