Alexandre Lacazette netted for the second game running, but Michail Antonio first half equaliser set up a nervy second period, before Eddie Nketiah stole all three points late on.
Both sides struggled to create any meaningful rhythm in the opening stages, but Arsenal showed their efficiency as Lacazette buried their first chance on 25 minutes.
Bukayo Saka’s quick ball released Pierre-Emerick Aubameyang, the Gunners skipper hung up an inviting cross, and Lacazette powered past Lukasz Fabianksi.
But with Arsenal unable to build on Lacazette’s opener, the pragmatic Hammers found a deserved equaliser just before the break.
Ryan Fredricks showed pace to burst in behind Saka and the squared for Antonio to poke past Bernd Leno.
The Hammers were the better side after the break, with Leno called into action to bravely deny Antonio and former Hull City winger Jarrod Bowen.
David Moyes’ side certainly looked the more likely to nick a winner, but Arsenal again showed a killer instinct in front of goal, as substitute Nketiah latched onto Dani Ceballos’ pass to curl past Fabianski.
FULL TIME AT THE EMIRATES STADIUM IT’S ARSENAL 2 WEST HAM 1