Pregunta con el siguiente código. Si estoy disminuyendo el valor del objeto y cuando llega a cero, cómo satisface esta condición if(!obj1[letra]) porque la letra aún existe en obj, su valor simplemente está disminuyendo.
function validAnagram(a, b){ if(a.length !== b.length){ return false; } if(a.length === 0 && b.length === 0 ){ return true; } let obj1 = {}; // add whatever parameters you deem necessary - good luck! for(let i= 0; i<a.length; i++){ if(obj1[a[i]]>0){ obj1[a[i]]++ }else{ obj1[a[i]] = 1; } } for(let i =0; i<b.length; i++){ let letter = b[i]; if(!obj1[letter]){ return false } else { obj1[letter]-- } } return true; } validAnagram('aza', 'zaz')Hay 3 casos para obj1[letter] :
letter no existe en obj1 , en cuyo caso se evalúa como undefined .letter en obj1 y el valor no es cero.letter en obj1 y el valor es cero.El caso dos es obvio. La letra existe y el valor es mayor que cero, por lo que se decrementará en uno.
Los casos uno y tres se denominan valores falsos en JavaScript y los niegan con ! los convierte en true , lo cual tiene sentido. Si la letra no existe o ya está agotada, de ahí el valor cero, no es un anagrama propiamente dicho.
En otras palabras, el valor no bajará más allá de cero. Será capturado en cero y el algoritmo devuelve false .