var sum_x = 0; var sum_y = 0; var sum_xy = 0; var sum_xx = 0; var count = 0; /* * We'll use those variables for faster read/write access. */ var x = 0; var y = 0; /*****************************WHAT MARKO ADDED***************************************/ //index of array where y array will progress into a sequence of non-zero elements var index_nonZero; //first if statement checks if first element is zero //if y[0]!=0 then we have nothing to worry about //if y[0] = 0 then we see where the elements begin to be non zero //once we find that spot, we break out of loop and remove beginning elements that are zero. if (values_y[0] === 0) { for (i = 0; i < values_y.length; i++) { if (values_y[i] !== 0) { index_nonZero = i; break; } } } values_y = values_y.splice(index_nonZero, values_y.length); tempValuesX = values_x.splice(0, index_nonZero); values_x = values_x.splice(index_nonZero, values_x.length); console.log(values_y); //console.log(values_X); /******************************END OF WHAT MARKO ADDED***************************/ var values_length = values_x.length; if (values_length != values_y.length) { throw new Error('The parameters values_x and values_y need to have same size!'); } /* * Nothing to do. */ if (values_length === 0) { return [ [], [] ]; } // values_y is shorter than x and so it fails trying to do calculations below. Need to // look into for a fix /* * Calculate the sum for each of the parts necessary. */ for (var v = 0; v < values_length; v++) { x = values_x[v]; y = values_y[v]; sum_x += x; sum_y += y; sum_xx += x * x; sum_xy += x * y; count++; } /* * Calculate m and b for the formular: * y = x * m + b */ var m = (count * sum_xy - sum_x * sum_y) / (count * sum_xx - sum_x * sum_x); var b = (sum_y / count) - (m * sum_x) / count; /* * We will make the x and y result line now */ var result_values_x = []; var result_values_y = []; result_values_x.push(tempValuesX); for(i = 0; i < index_nonZero; i++) { result_values_y.push(0); } for (var v = 0; v < values_length; v++) { x = values_x[v]; y = x * m + b; result_values_x.push(x); result_values_y.push(y); } return [result_values_x, result_values_y]; }