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; } }