循环遍历对象并映射到JavaScript

时间:2015-11-04 09:46:08

标签: 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) );   
}

2 个答案:

答案 0 :(得分:1)

看起来至少有两个错误:

  1. 尝试调用log(10)而不是Math.log(10)。这可能导致未定义的错误。
  2. nn_snn_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)
    }
    
  3. Working Fiddle

答案 1 :(得分:0)

正如我所说:

  • Math.log()缺失
  • 值不是数字
  • 增量应为2
  • 缺少某些键和值(此处填充0

缺失值可以替换为默认值,如

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

&#13;
&#13;
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'));
&#13;
&#13;
&#13;