Ошибка: Левая часть арифметической операции должна иметь тип «любой», «число» или «перечисление», умножающее значение между массивами

#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. У вас была ошибка компиляции