Ciao ragazzi scusate se vi rompo ancora...

Questa volta è un bel problemino e farò fatica anche a spiegarvi il problema:

Io ho una funziona che fa le seguenti "operazioni" nel seguente ordine:

1) vi è un array
2) grazie alla chiamata di un'altra funzione (la funzione "getCombinations") riesco a fare tutte le combinazioni tra gli elementi dell'array.
3) in un ciclo for sono presenti vari metodi che mi permettono, per ogni combinazione, di estrarre ciascun elemento e di dividere il risultato ottenuto per il numero di elementi della combinazione.

Esempio [30,40,50]
Con il punto 3 ottengo come risultato finale = 30 (perché (30+40+50)/3)

4) Poi vi è un IF che dice che se il valore ottenuto è compreso tra due valori, allora viene dichiarata una variabile, a cui viene associato un valore di tipo stringa.

5) Infine si chiude If e si chiude il ciclo for, e prima che venga chiusa la funzione viene dichiarata una variabile dove all'interno vi è la variabile presente nella struttura if.


Ora guardate il codice:

codice:
function ottienivalori() {
 
var prova = 30;
var arr6s = [[7],[8],[9],[10],[11],[12]]; // questo è l'array
var n6s = 3;   // questo valore dice che le combinazioni dovranno essere di 3 elementi
var results6s = getCombinations(arr6s.slice(),n6s);   // questa è la funzione per fare le combinazioni
 
for(var i = 0; i < results6s.length; i++)  {

    var cs1 = results6s[i].slice(0,1);  // tutte queste righe servono solo a far ciò che ho scritto nel 
    var cs2 = results6s[i].slice(1,2);  // punto 3 
    var cs3 = results6s[i].slice(2,3);

    var cs1s = cs1.toLocaleString();
    var cs2s = cs2.toLocaleString();
    var cs3s = cs3.toLocaleString();

    var cs1ss= cs1s.substr(0);
    var cs2ss=cs2s.substr(0);
    var cs3ss= cs3s.substr(0);
    var elem1= parseFloat(cs1ss);
    var elem2= parseFloat(cs2ss);
    var elem3= parseFloat(cs3ss);
    var fine = (elem1+elem2+elem3+elem4+elem5+elem6)/6;
     var datoimp6s= (prova-fine);

   
    if (((datoimp6s < 77) && (datoimp6s > 50)) || ((datoimp6s > -77) && (datoimp6s < -50))) {
  var back10s = "3"; // quindi se la condizione di if è vera allora viene dichiarata questa variabile
 }
  
  else if ((datoimp6s < 43) || (datoimp6s > 47) || (datoimp6s > -43) || (datoimp6s < -47) )  {  
  var back11s = " "; // altrimenti viene dichiarata questa variabile 
   }
  }// finisce ciclo for


 if (back10s==null) { //se invece black10s è nullo, ovvero che tra tutte le combinazioni nessun 
   var back10s = ' ';   //valore di "datoimp6" soddisfa le condizioni dell'if riportato poco più sopra
   }                           // viene dichiarata la variabile black10s  ma dando un diverso valore
      
 
   var allert= '<span>' + back10s + '  ' + back11s + '  ' +  datoimp6 + '</span>';                                       
  $(allert).appendTo('#moda'); //la variabile verrà inserita nel div "moda". 
  
} // quindi suppongo che nel div moda siano riportati i valori di back10s , di back11s e di datoimp6 
 // che sono tutti quei valori ottenuti dalle combinazioni e da quelle righe di codice, che soddisfano 
// le condizioni della struttura if .

Fino a qui ci siamo e spero ci siate anche voi... perché il problema arriva ora:

io dovrei aggiungere questo pezzo di codice nella funzione di sopra:


codice:
 


var cros = 30;
var arr6M = [[4],[6],[7],[12],[14],[16]]; // questo è l'array
var n6M = 3;   // questo valore dice che le combinazioni dovranno essere di 3 cifre
var results6M = getCombinations(arr6M.slice(),n6M); // questa è la funzione per fare le combinazioni
 
for(var i = 0; i < results6M.length; i++)  {

    var cs1m = results6M[i].slice(0,1);  // tutte queste righe servono solo a far ciò che ho scritto nel 
    var cs2m = results6M[i].slice(1,2);  // punto 3 
    var cs3m = results6M[i].slice(2,3);

    var cs1sm = cs1m.toLocaleString();
    var cs2sm = cs2m.toLocaleString();
    var cs3sm = cs3m.toLocaleString();

    var cs1ssm= cs1sm.substr(0);
    var cs2ssm= cs2sm.substr(0);
    var cs3ssm= cs3sm.substr(0);
    var elem1m= parseFloat(cs1ssm);
    var elem2m= parseFloat(cs2ssm);
    var elem3m= parseFloat(cs3ssm);
    var finem = (elem1m+elem2m+elem3m+elem4m+elem5m+elem6m)/3;
     var drax= (cros+finem);
 }


//Quindi in poche parole, questo pezzo è quasi identico alla funzione riportata sopra. 
// L'unica differenza è che qui i valori dell'array sono diversi. E ovviamente i valori che ci 
// interessano saranno quelli della variabile "drax"
il problema è questo:

io dovrei modificare la struttra if della funzione "ottienivalori" più o meno in questo modo:


codice:
 

 if (((datoimp6s < 77) && (datoimp6s > 50)) || ((datoimp6s > -77) && (datoimp6s < -50))) {
  var back10s = "3"; 
  var allerta = drax ; // ECCO LA MODIFICA
  
 }
  
  else if ((datoimp6s < 50) || (datoimp6s > 77) || (datoimp6s > -50) || (datoimp6s < -77) )  {  
  var back11s = " "; 
   }
  


 if (back10s==null) { 
   var back10s = ' ';   
   }                           
      
 
   var allert= '<span>' + back10s + '  ' + back11s + '  ' +  datoimp6 + ' ' + allerta + '</span>';  // ECCO LA SECONDA MODIFICA                                     
  $(allert).appendTo('#moda');


Quindi se, per quanto riguarda la struttura IF, il valore di datoimp6s è compreso tra quei valori numerici (questa operazione viene ripetuta per ogni combinazione, perché l'if si trova nel ciclo for )
allora deve essere dichiarata la variabile back10s ma anche la variabile allerta.
Alla variabile allerta viene associata la variabile drax.
E la variabile drax è il risultato del pezzo di codice che voglio aggiungere.

Ma io vorrei che vengano aggiunti tutti i valori di drax solo per ogni valore di datoimp6 compreso tra quei valori... Vi faccio un esempio per farmi spiegare :

Dato il seguente codice:

codice:
function ottienivalori() {
 
var prova = 30;
var arr6s = [[7],[8],[9],[10],[11],[12]]; 
var n6s = 3;   
var results6s = getCombinations(arr6s.slice(),n6s);   
for(var i = 0; i < results6s.length; i++)  {

    var cs1 = results6s[i].slice(0,1);  
    var cs2 = results6s[i].slice(1,2);  
    var cs3 = results6s[i].slice(2,3);

    var cs1s = cs1.toLocaleString();
    var cs2s = cs2.toLocaleString();
    var cs3s = cs3.toLocaleString();

    var cs1ss= cs1s.substr(0);
    var cs2ss=cs2s.substr(0);
    var cs3ss= cs3s.substr(0);
    var elem1= parseFloat(cs1ss);
    var elem2= parseFloat(cs2ss);
    var elem3= parseFloat(cs3ss);
    var fine = (elem1+elem2+elem3+elem4+elem5+elem6)/6;
     var datoimp6s= (prova-fine);

 }
}
diciamo che se dovessero essere scritti tutti i valori di datoimp6s avremmo una cosa del genere:


40 //1°
37 //2°
56 //3°
21 //4°
78 //5°
97 //6°
99 //7°
70 //8°

Con la struttura condizionale if solo i seguenti valori andrebbero bene :

56 e 70, ovvero il 3° e l'8° elemento.

Quindi la condizione della struttura if è soddisfatta, pertanto è vera la variabile
var back10s = "3";

e infine nel div moda verrà riportato ciò : 3 - 56 70


Invece dato il seguente codice (che volevo aggiungere) :


codice:
 


var cros = 30;
var arr6M = [[4],[6],[7],[12],[14],[16]]; // questo è l'array
var n6M = 3;   // questo valore dice che le combinazioni dovranno essere di 3 cifre
var results6M = getCombinations(arr6M.slice(),n6M); // questa è la funzione per fare le combinazioni
 
for(var i = 0; i < results6M.length; i++)  {

    var cs1m = results6M[i].slice(0,1);  // tutte queste righe servono solo a far ciò che ho scritto nel 
    var cs2m = results6M[i].slice(1,2);  // punto 3 
    var cs3m = results6M[i].slice(2,3);

    var cs1sm = cs1m.toLocaleString();
    var cs2sm = cs2m.toLocaleString();
    var cs3sm = cs3m.toLocaleString();

    var cs1ssm= cs1sm.substr(0);
    var cs2ssm= cs2sm.substr(0);
    var cs3ssm= cs3sm.substr(0);
    var elem1m= parseFloat(cs1ssm);
    var elem2m= parseFloat(cs2ssm);
    var elem3m= parseFloat(cs3ssm);
    var finem = (elem1m+elem2m+elem3m+elem4m+elem5m+elem6m)/3;
     var drax= (cros+finem);
}
se dovessimo scrivere tutti i valori di drax avremmo una cosa del genere :

20 //1°
17 //2°
5 //3°
11 //4°
38 //5°
9 //6°
62 //7°
70 //8°


quando ho detto che vorrei modificare l'if in questo modo :

codice:
 



if (((datoimp6s < 77) && (datoimp6s > 50)) || ((datoimp6s > -77) && (datoimp6s < -50))) {
  var back10s = "3"; 
  var allerta = drax ; // ECCO LA MODIFICA

}
//ecc ecc

  var allert= '<span>' + back10s + '  ' + back11s + '  ' +  datoimp6 + ' ' + allerta + '</span>'; 
   $(allert).appendTo('#moda'); 

 }
intendevo dire che per i valori di datoimp6s che soddisfano le condizioni di if , quindi in questo caso:

56 //3° elemento
70 //8° elemento

devono essere riportati i valori di drax. Ma quali valori ???? Semplice.... il 3° elemento e l'8° elemento. Quindi :


5
70


Avete una mezza idea di come si possa risolvere questo problema ????

Mi scuso per l'immensa lunghezza del post e per non essermi spiegato, malgrado le mie buone intenzioni, in maniera decente.


Confido in voi



Grazie mille in anticipo...