我试图遍历一个对象文字并将子字符串映射到一个值并将其插入一个等式中。现在我的代码没有返回一个整数,而是未定义。这是代码:
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 :(得分:1)
看起来至少有两个错误:
从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)
}
答案 1 :(得分:0)
正如我所说:
Math.log()
缺失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'));
&#13;