Estoy tratando de hacer este desafío en FCC, actualización de inventario .
El único problema al que me enfrento es que, cuando quiero empujar el nuevo elemento de la nueva matriz a la matriz anterior, me está dando tiempo de espera. Sin embargo, agregar los números si el elemento coincide funciona bien. Esto es lo que he hecho hasta ahora.
//sorting the 2D array function sortingArray(a,b){ if (a[1] === b[1]) { return 0; } else { return (a[1] < b[1]) ? -1 : 1; } } function updateInventory(arr1, arr2) { if (arr1.length === 0) { return arr2.sort(sortingArray) } if (arr2.length === 0) { return arr1.sort(sortingArray) } for (let i = 0; i < arr2.length; i++) { for (let j = 0; j < arr1.length; j++) { if (arr2[i][1] === arr1[j][1]) { arr1[j][0] = arr1[j][0] + arr2[i][0] //adding the numbers if it matches } if(arr2[i][1] != arr1[j][1]){ arr1.push(arr2[i]) //pushing the unique element } } } console.log(arr1) return arr1.sort(sortingArray); } // Example inventory lists var curInv = [[21, "Bowling Ball"], [2, "Dirty Sock"], [1, "Hair Pin"], [5, "Microphone"]]; var newInv = [[2, "Hair Pin"], [3, "Half-Eaten Apple"], [67, "Bowling Ball"], [7, "Toothpaste"]]; updateInventory(curInv, newInv);
No está comprobando la singularidad de cada elemento al agregar a curInv.
Para i = 0, está comprobando los elementos [21, "Bowling Ball"]
con [2, "Hair Pin"], [3, "Half-Eaten Apple"], [67, "Bowling Ball"], [7, "Toothpaste"]
Por lo tanto, cuando se compara [21, "Bowling Ball"]
[2, "Hair Pin"]
este elemento se agrega a curInv, porque su segundo elemento no es igual entre sí. Y lo mismo sucede con [3, "Half-Eaten Apple"], [7, "Toothpaste"]
Ahora, cuando i = 1, está comprobando los elementos [2, "Dirty Sock"]
con [2, "Hair Pin"], [3, "Half-Eaten Apple"], [67, "Bowling Ball"], [7, "Toothpaste"]
Aquí, cuando [2, "Dirty Sock"]
se compara con [2, "Hair Pin"]
o los otros elementos, se agregan nuevamente a curInv. Es incorrecto porque estos elementos ya existen desde la primera iteración (i = 0) y, por lo tanto, no está verificando la singularidad de los elementos.
Esto también resultó en el aumento del tamaño de curInv más allá de lo que pretendía.
Intente usar alguna otra estructura de datos o use algún algoritmo diferente y luego construya la matriz resultante.
Puede reducir significativamente las líneas y la complejidad de la percepción si usa objetos como almacenamiento temporal de datos. Por ejemplo:
const curInv = [[21, "Bowling Ball"],[2, "Dirty Sock"],[1, "Hair Pin"],[5, "Microphone"]]; const newInv = [[2, "Hair Pin"],[3, "Half-Eaten Apple"],[67, "Bowling Ball"],[7, "Toothpaste"]]; const rev = (item) => item.reverse(); function updateInventory(arr1, arr2) { const obj1 = Object.fromEntries(arr1.map(rev)); const obj2 = Object.fromEntries(arr2.map(rev)); const mergedObj = Object.entries(obj2) .reduce((acc, [name, count]) => ({ ...acc, [name]: acc[name] ? acc[name] += count : count }), obj1); return Object.entries(mergedObj) .sort(([a], [b]) => a.localeCompare(b)) .map(rev); }; console.log(updateInventory(curInv, newInv));
.as-console-wrapper{min-height: 100%!important; top: 0}