Il caso speciale dovrebbe essere all'interno o all'esterno del ciclo for qui?

2

Ad esempio, supponiamo di avere 2 matrici:

let arr1=[5,2,1];
let arr2=["abcde","ab","a"];

il mio lavoro è semplice: per verificare se la lunghezza delle stringhe in arr2 è maggiore dell'elemento corrispondente con lo stesso indice in arr1, quindi:

let arr1=[5,2,1];
let arr2=["abcde","ab","a"];

è vero,

let arr1=[5,3,1];
let arr2=["abcde","ab","a"];

è falso,

let arr1=[5,2,1,1];
let arr2=["abcde","ab","a"];

è anche falso. Sto lottando dove dovrei mettere il controllo della lunghezza dell'array:

Stile 1: mettilo fuori per loop:

function isAllLarger(arr1,arr2){
  if(arr1.length>arr2.length){
    return false;
  }
  for(let i=0;i<arr1.length;i++){
    if(arr2[i].length<arr1[i]){
      return false;
    }
  }
  return true;
}

Stile 2: mettilo dentro per loop:

function isAllLarger(arr1,arr2){
  for(let i=0;i<arr1.length;i++){
    if(i>=arr2.length|| arr2[i].length<arr1[i]){
      return false;
    }
  }
  return true;
}

Quale dovrei usare?

    
posta mmmaaa 21.09.2018 - 10:10
fonte

1 risposta

2

Entrambi sono perfettamente possibili. Ma ci sono dei motivi per cui dovresti preferire l'opzione 1:

  • Innanzitutto, l'opzione 1 chiarisce l'intento: tieni subito a mente il caso speciale e comprendi come gestirlo. Con la seconda opzione un lettore disinformato (o il tuo futuro tu?) Dovrebbe dedurre dal codice che esiste un caso speciale. Certo, è fattibile ma non così facile come con la prima opzione.
  • In secondo luogo, l'opzione 2 richiede un'altra valutazione delle condizioni ad ogni iterazione. Ma siamo onesti: questo argomento non è la ragione principale, ma solo una curiosità intellettuale. Il tempo di esecuzione aggiuntivo sarebbe marginale e un compilatore ottimizzante potrebbe persino sbarazzarsene.
  • Infine (grazie a John Wu per aver attirato l'attenzione su questo), l'opzione 2 elaborerebbe inutilmente gli elementi nel ciclo: potremmo già conoscere il risultato finale a causa della diversa lunghezza.
risposta data 22.09.2018 - 00:10
fonte

Leggi altre domande sui tag