#angular #typescript
Вопрос:
Машинописный текст. Я не могу избавиться от этой ошибки The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.ts(2362)
возникла проблема при умножении значений внутри массива. пытался создать функцию для вычисления косинусного сходства с этим кодом:
cosineSim(Q: string[], B: string[]){ //var dotproduct = 0; let dotproduct: number= 0; var mA = 0; var mB = 0; for(var i=0; ilt; Q.length;i ){ //The error goes here at Q[i] and B[i] //it says: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.ts dotproduct = Q[i] * B[i]; mA = (Q[i] * Q[i]); mB = (B[i] * B[i]); } mA = Math.sqrt(mA); mB = Math.sqrt(mB); var similarity = (dotproduct) / ((mA) * (mB)); return similarity; }
Что я передаю в другой функции, подобной этому коду:
var cos1 = this.cosineSim(eachdocTFIDF[0], eachdocTFIDF[1]); console.log(cos1);
Образец данных:
//example value eachdocTFIDF[0] = [0.5, 0.01123, 0, 0, 0.693215]; eachdocTFIDF[1] = [0.342131, 0.786785, 0, 0.2345, 0.00123];
Комментарии:
1. В аннотациях вашего типа говорится, что это
string
массивы. Если они должны бытьnumber
массивами, напишите это вместо этого.
Ответ №1:
function cosineSim(Q: number[], B: number[]){ //var dotproduct = 0; let dotproduct: number= 0; var mA = 0; var mB = 0; for(var i=0; ilt; Q.length;i ){ //The error goes here at Q[i] and B[i] //it says: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.ts dotproduct = Q[i] * B[i]; mA = (Q[i] * Q[i]); mB = (B[i] * B[i]); } mA = Math.sqrt(mA); mB = Math.sqrt(mB); var similarity = (dotproduct) / ((mA) * (mB)); return similarity;
}
Комментарии:
1. У вас была ошибка компиляции