2015-07-02 3 views
-2

Каков наилучший способ нормализации чисел (до 0-1 или 0-100) в объекте.Нормализовать номера в объекте

Например:

obj = { 
    "key1": 100, 
    "key2": 500, 
    "key3": 1000 
} 

Желаемая result-

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

Но что это лучший способ, чтобы нормализовать если цифры в объекте?

+3

Как трудно было бы это на самом деле будет попробовать что-нибудь? –

+0

диапазон 0 ... 1 не соответствует вашим желаемым результатам. –

ответ

1

Это довольно легко сделать - петли через объект и преобразовать диапазон, вот некоторые псевдо-код:

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

Вы должны знать, минимальное и максимальное значения в объект, чтобы сделать этот конкретный метод Работа.

-1

Как насчет?

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}

0

Если 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; 
}) 
0

Этот сценарий перемещает заданные значения в этом интервале [100, 1000] в желаемый интервал [0, 1]. Основой расчета является наклон m и некоторые значения коррекции.

var obj = { 
 
     "key1": 100, 
 
     "key2": 500, 
 
     "key3": 1000 
 
    }, 
 
    range = [0, 1], 
 
    i, 
 
    min, max, 
 
    m, 
 
    values = []; 
 
for (i in obj) { 
 
    values.push(obj[i]); 
 
    obj[i] = { value: obj[i] }; 
 
} 
 
min = Math.min.apply(Math, values); 
 
max = Math.max.apply(Math, values); 
 
m = (range[1] - range[0])/(max - min); 
 
for (i in obj) { 
 
    obj[i].normalized = (obj[i].value - min) * m + range[0]; 
 
} 
 
document.write('<pre>' + JSON.stringify(obj, null, 4) + '</pre>');