With leaders Liverpool not in action until Sunday's trip to Manchester City, Arsenal had a chance to close the gap in the title race with victory at the Emirates Stadium.
But Mikel Arteta's side stumbled to a first loss in 16 league games as Jarrod Bowen netted West Ham's first-half winner before the Gunners had Myles Lewis-Skelly sent off after the interval.
Second-placed Arsenal, whose last top-flight defeat came at Newcastle in November, are eight points behind Liverpool, who would move a massive 11 points clear if they beat spluttering City.
After coming off the bench to score twice in the closing stages of last weekend's win at Leicester, Spain midfielder Mikel Merino started for injury-hit Arsenal as a makeshift striker.
But Arsenal's lack of cutting edge in the absence of Kai Havertz, Gabriel Jesus and Bukayo Saka was exposed when Aaron Wan-Bissaka's pin-point cross was headed in by Jarrod Bowen in the 44th minute.
There was more misery for Arsenal in the 73rd minute when Lewis-Skelly brought down Mohammed Kudus as the West Ham forward surged away on the half way line.
Lewis-Skelly was initially shown a yellow card but the defender's punishment was increased to a red after referee Craig Pawson consulted the pitchside monitor.
Bd-Pratidin English/ARK