gpt4 book ai didi

JavaScript 函数导致循环结束?

转载 作者:行者123 更新时间:2023-11-28 12:59:56 24 4
gpt4 key购买 nike

我的函数和循环有问题,但不确定原因。

var a = ['1,0,1', '0,1,0', '1,1,1'];
var b = [1, 1, 1];

function myFunction() {
for (i = 0; i < a.length; i++) {
var user = a[i].split(',');
var cs = cosinesim(user, b);
document.getElementById("cs").innerHTML += String(user) + ' ' + String(cs) + '<br>';
cs = 0;
user = '';
}
}

function cosinesim(A, B) {
var dotproduct = 0;
var mA = 0;
var mB = 0;
for (i = 0; i < A.length; i++) {
dotproduct += (parseInt(A[i]) * parseInt(B[i]));
mA += (parseInt(A[i]) * parseInt(A[i]));
mB += (parseInt(B[i]) * parseInt(B[i]));
}
mA = Math.sqrt(mA);
mB = Math.sqrt(mB);
if ((mA * mB) == 0) {
var similarity = 0
} else {
var similarity = (dotproduct) / (mA * mB)
}

return similarity;
}
<p id="cs"></p>
<button onclick="myFunction()">Click</button>

我试图让函数循环遍历数组并打印出数组中每个元素的余弦相似度,但它只打印第一个?如果我删除 cs 变量和计算,该函数将打印出所有用户。我不确定为什么在函数中添加余弦函数会导致它只运行一次?

感谢任何帮助,谢谢。

最佳答案

您在两个函数中使用相同的(全局)变量i。您应该将 i 声明为每个中的局部变量:

var i;

或者在for循环中:

for (var i = 0; ...

由于两个循环当前使用相同的i,一旦cosinesim()函数运行,第一个函数中的循环也将结束。

如果您在“严格”模式下编码,您会因此类隐式全局使用而收到错误。

关于JavaScript 函数导致循环结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51594262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com