2015-11-04 2 views
0

Я пытаюсь пропустить объектный литерал и сопоставить подстроку со значением и подключить его к уравнению. Прямо сейчас мой код не возвращает целое число, но вместо этого не определено. Вот код:Пробел через объект и карту, чтобы значение в JavaScript

function calcFunc(sequence) { 
    var dH = 0; 
    var dS = 108; 
    var i; 
    // Compute dH and dS 
    for (i = 0 ; i < (sequence.length - 1) ; i++) { 
     var pair = sequence.substr(i, 2); 
     dH += nn_h[pair]; 
     dS += nn_s[pair]; 
    } 
    dH *= -100.0; 
    dS *= -0.1; 
    return dH/(dS + 1.987 * Math.log(100/4000000000.0)) - 273.15 + 
    16.6 * (Math.log(50/1000.0)/Math.log(10)); 
} 
+0

Не могли бы вы добавить скрипку пример? –

+0

Что такое последовательность в вашем calcFunc? – Anonymous0day

+0

Пример вызова функции будет следующим: var sequence = "tctgtt"; calcFunc (sequence) – Haloor

ответ

1

Похоже, есть, по крайней мере, две ошибки:

  1. Попытка вызвать журнал (10) вместо Math.log (10). Вероятно, это приведет к неопределенной ошибке.
  2. Не преобразовывая строки в целые числа при их загрузке с nn_s и nn_h объектов. Это означает, что вы объедините строки, а не объедините их как целые числа.

    function calcFunc(sequence) { 
        var dH = 0; 
        var dS = 108; 
        var i; 
    
        // Compute dH and dS 
        for (i = 0 ; i < (sequence.length - 1) ; i++) { 
         var pair = sequence.substr(i, 2); 
         dH += parseInt(nn_h[pair], 10); // parseInt 
         dS += parseInt(nn_s[pair], 10); // parseInt 
        } 
    
        dH *= -100.0; 
        dS *= -0.1; 
    
        return dH/(dS + 1.987 * Math.log(100/4000000000.0)) - 273.15 + 
         16.6 * (Math.log(50/1000.0)/Math.log(10)); // Math.log(10) 
    } 
    

Working Fiddle

+0

Im довольно уверен, что третья проблема не увеличивает 'i' на 2. В противном случае для указанного ввода (' tctgtt') есть значение для 'tc', но не один для 'ct' – Jamiec

+0

@Jamiec Возможно, это зависит от возможных значений последовательности. –

0

Как я уже говорил:

  • Math.log() отсутствует
  • Значения не являются числами
  • Increment должно быть 2
  • Некоторые ключи и значения Är е отсутствует (здесь заполнены 0)

отсутствующие значения могут быть заменены на значения по умолчанию, как

dH += nn_h[pair] || 0; 
dS += nn_s[pair] || 0; 

var nn_s = { 
 
    tc: 135, 
 
    tg: 129, 
 
    tt: 240, 
 
    tn: 168, 
 
    na: 168, 
 
    nc: 210, 
 
    ng: 220, 
 
    nt: 215, 
 
    nn: 203 
 
}; 
 
var nn_h = { 
 
    tc: 0, 
 
    tg: 0, 
 
    tt: 0, 
 
    tn: 66, 
 
    na: 66, 
 
    nc: 85, 
 
    ng: 91, 
 
    nt: 80, 
 
    nn: 80 
 
}; 
 
function calcFunc(sequence) { 
 
    var dH = 0; 
 
    var dS = 108; 
 
    var i; 
 
    // Compute dH and dS 
 
    for (i = 0 ; i < sequence.length ; i+=2) { 
 
     var pair = sequence.substr(i, 2); 
 
     dH += nn_h[pair]; 
 
     dS += nn_s[pair]; 
 
    } 
 
    dH *= -100.0; 
 
    dS *= -0.1; 
 
    return dH/(dS + 1.987 * Math.log(100/4000000000.0)) - 273.15 + 
 
    16.6 * (Math.log(50/1000.0)/Math.log(10)); 
 
} 
 

 
document.write(calcFunc('tctgtt'));

Смежные вопросы