--- id: a56138aff60341a09ed6c480 title: Aggiornamento dell'inventario challengeType: 1 forumTopicId: 16019 dashedName: inventory-update --- # --description-- Confronta e aggiorna l'inventario memorizzato in un array 2D rispetto ad un secondo array 2D che rappresenta una nuova consegna. Aggiorna le quantità attuali degli oggetti esistenti (in `arr1`). Se un oggetto non viene trovato, aggiungi il nuovo oggetto e la sua quantità nell'array dell'inventario. L'array di inventario restituito dovrebbe essere in ordine alfabetico per articolo. # --hints-- La funzione `updateInventory` deve restituire un array. ```js assert.isArray( updateInventory( [ [21, 'Bowling Ball'], [2, 'Dirty Sock'], [1, 'Hair Pin'], [5, 'Microphone'] ], [ [2, 'Hair Pin'], [3, 'Half-Eaten Apple'], [67, 'Bowling Ball'], [7, 'Toothpaste'] ] ) ); ``` `updateInventory([[21, "Bowling Ball"], [2, "Dirty Sock"], [1, "Hair Pin"], [5, "Microphone"]], [[2, "Hair Pin"], [3, "Half-Eaten Apple"], [67, "Bowling Ball"], [7, "Toothpaste"]])` dovrebbe restituire un array di lunghezza di 6. ```js assert.equal( updateInventory( [ [21, 'Bowling Ball'], [2, 'Dirty Sock'], [1, 'Hair Pin'], [5, 'Microphone'] ], [ [2, 'Hair Pin'], [3, 'Half-Eaten Apple'], [67, 'Bowling Ball'], [7, 'Toothpaste'] ] ).length, 6 ); ``` `updateInventory([[21, "Bowling Ball"], [2, "Dirty Sock"], [1, "Hair Pin"], [5, "Microphone"]], [[2, "Hair Pin"], [3, "Half-Eaten Apple"], [67, "Bowling Ball"], [7, "Toothpaste"]])` dovrebbe restituire `[[88, "Bowling Ball"], [2, "Dirty Sock"], [3, "Hair Pin"], [3, "Half-Eaten Apple"], [5, "Microphone"], [7, "Toothpaste"]]`. ```js assert.deepEqual( updateInventory( [ [21, 'Bowling Ball'], [2, 'Dirty Sock'], [1, 'Hair Pin'], [5, 'Microphone'] ], [ [2, 'Hair Pin'], [3, 'Half-Eaten Apple'], [67, 'Bowling Ball'], [7, 'Toothpaste'] ] ), [ [88, 'Bowling Ball'], [2, 'Dirty Sock'], [3, 'Hair Pin'], [3, 'Half-Eaten Apple'], [5, 'Microphone'], [7, 'Toothpaste'] ] ); ``` `updateInventory([[21, "Bowling Ball"], [2, "Dirty Sock"], [1, "Hair Pin"], [5, "Microphone"]], [])` dovrebbe restituire `[[21, "Bowling Ball"], [2, "Dirty Sock"], [1, "Hair Pin"], [5, "Microphone"]]`. ```js assert.deepEqual( updateInventory( [ [21, 'Bowling Ball'], [2, 'Dirty Sock'], [1, 'Hair Pin'], [5, 'Microphone'] ], [] ), [ [21, 'Bowling Ball'], [2, 'Dirty Sock'], [1, 'Hair Pin'], [5, 'Microphone'] ] ); ``` `updateInventory([], [[2, "Hair Pin"], [3, "Half-Eaten Apple"], [67, "Bowling Ball"], [7, "Toothpaste"]])` dovrebbe restituire `[[67, "Bowling Ball"], [2, "Hair Pin"], [3, "Half-Eaten Apple"], [7, "Toothpaste"]]`. ```js assert.deepEqual( updateInventory( [], [ [2, 'Hair Pin'], [3, 'Half-Eaten Apple'], [67, 'Bowling Ball'], [7, 'Toothpaste'] ] ), [ [67, 'Bowling Ball'], [2, 'Hair Pin'], [3, 'Half-Eaten Apple'], [7, 'Toothpaste'] ] ); ``` `updateInventory([[0, "Bowling Ball"], [0, "Dirty Sock"], [0, "Hair Pin"], [0, "Microphone"]], [[1, "Hair Pin"], [1, "Half-Eaten Apple"], [1, "Bowling Ball"], [1, "Toothpaste"]])` dovrebbe restituire `[[1, "Bowling Ball"], [0, "Dirty Sock"], [1, "Hair Pin"], [1, "Half-Eaten Apple"], [0, "Microphone"], [1, "Toothpaste"]]`. ```js assert.deepEqual( updateInventory( [ [0, 'Bowling Ball'], [0, 'Dirty Sock'], [0, 'Hair Pin'], [0, 'Microphone'] ], [ [1, 'Hair Pin'], [1, 'Half-Eaten Apple'], [1, 'Bowling Ball'], [1, 'Toothpaste'] ] ), [ [1, 'Bowling Ball'], [0, 'Dirty Sock'], [1, 'Hair Pin'], [1, 'Half-Eaten Apple'], [0, 'Microphone'], [1, 'Toothpaste'] ] ); ``` # --seed-- ## --seed-contents-- ```js function updateInventory(arr1, arr2) { return arr1; } // 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); ``` # --solutions-- ```js function updateInventory(arr1, arr2) { arr2.forEach(function(item) { createOrUpdate(arr1, item); }); // All inventory must be accounted for or you're fired! return arr1; } function createOrUpdate(arr1, item) { var index = -1; while (++index < arr1.length) { if (arr1[index][1] === item[1]) { arr1[index][0] += item[0]; return; } if (arr1[index][1] > item[1]) { break; } } arr1.splice(index, 0, item); } // 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); ```