The Hammers will leave the Emirates Stadium feeling deflated after conceding late on, especially given that they competed well against the hosts, and looked good value for at least a point.
Story of the match
The first big opportunity of the game fell to the visitors inside five minutes following a corner, Angelo Ogbonna unable to find the back of the net after meeting Declan Rice’s header across goal.
West Ham continued to press forwards during an opening ten minutes in which they looked the brighter of the two sides, testing Arsenal’s defence with a series of set-pieces.
The away side then had appeals for a penalty waved away by referee Michael Oliver when Jarrod Bowen went down under minimal contact from Gabriel, the Gunners continuing to invite pressure with several wayward passes.
Despite their slow start, Arsenal took the lead just before the 25 minute-mark, Pierre Emerick-Aubameyang racing onto a through ball before crossing to Alexandre Lacazette who headed home powerfully from close-range.
There was a VAR check for offside, however Issa Diop’s trailing leg was adjudged to have played the Arsenal captain on, and the goal was allowed to stand.
The hosts looked more comfortable after the opener, and Bukayo Saka tried his luck minutes later with a shot that flew just over, however West Ham then had another penalty shout when the ball hit Gabriel inside the box, their claims again denied.
The teams looked evenly matched during the first 45 minutes, and this was reflected just before the break as Michail Antonio finished a sweeping counter-attack to make it 1-1, the forward tapping home Ryan Fredericks’ low cross, and the sides went in level.
Arsenal dominated possession at the start of the second-half, but the away side almost went ahead on the 53rd minute, Gabriel with a vital interception to prevent Antonio from converting Arthur Masuaku's whipped delivery.
West Ham grew into the half, beginning to enjoy more of the ball on the hour-mark, and minutes later Mikel Arteta made the first change when Nicolas Pepe was brought on to replace Willian.
Despite the substitution, it was the Hammers who looked most likely to get the second goal of the game, Tomas Soucek going close as he rattled the crossbar with a powerful header.
With the game in the balance and 15 minutes remaining, Eddie Nketiah was introduced to replace Lacazette, while Moyes made his first change by bringing on Andriy Yarmolenko for Jarrod Bowen.
The substitutions proved pivotal as Yarmolenko failed to track Dani Ceballos with just five minutes remaining, the Spanish midfielder allowed to find space behind the defence before squaring to Nketiah who passed into an empty net to make it 2-1.
Sebastien Haller and Felipe Anderson were brought on in the latter stages as West Ham looked to salvage a point, but Arteta's men managed the final minutes, and the hosts took all three points.
Improved performance from Moyes' men
West Ham responded from their disappointing opening day defeat with a much better performance against Arsenal, showing the desire and commitment that was previously lacking.
The Hammers competed well against the Gunners and probably deserved at least a point, giving David Moyes a platform to build on as they continue their difficult start to the season with Wolves up next.
The 5-at-the-back formation was effective for the most part, left wing-back Arthur Masuaku particularly impressive upon his return to the team.
Arsenal win despite lacklustre performance
Mikel Arteta will be very pleased to see his team run out victorious despite an underwhelming performance, in comparison to their emphatic 3-0 win against Fulham last week.
Pierre Emerick-Aubameyang had a quiet night, his first match since signing a contract extension, but the Arsenal boss will be happy to have seen Lacazette and Nketiah contribute when their main man was not at his best.