var intersect = function(nums1, nums2) { var arr = []; var obj = {}; for (let i = 0; i < nums1.length; i++) { if (!(nums1[i] in obj)) { obj[nums1[i]] = 1; } else { obj[nums1[i]] += 1; } } console.log(obj) for (let i = 0; i < nums2.length; i++) { if (obj[nums2[i]] != 0 && obj[nums2[i]] != undefined) { //when i = 3 ie, 8 it should push into arr but it isn't. Why?// arr.push(nums2[i]); obj[nums2[i]] -= 1; } } console.log(obj); return arr; }; let nums1 = [4, 9, 5]; let nums2 = [9, 4, 9, 8, 4]; console.log(intersect(nums1, nums2));
De acuerdo con la condición if(obj[nums2[i]]!=0 && obj[nums2[i]]!=undefined )
, que es cierto en caso de que i = 3
, es decir, 8, y debería insertarse en mi arr pero no lo es. t! ¿por qué?
cuando i = 3, es decir, 8 debería empujar a arr pero no lo es. Por qué ?
Para responder a su pregunta, obj[nums2[i]] != 0 && obj[nums2[i]] != undefined
verificará si los elementos de la matriz nums2
deben estar allí en el obj
. 8 como propiedad no estará disponible en obj
ya que faltaba en la matriz nums1
.
Creo que deberías probar esto :
for (let i = 0; i < nums2.length; i++) { if (!(nums2[i] in obj)) { // push the nums2 element in the array if not available in the obj arr.push(nums2[i]); obj[nums2[i]] -= 1; } }