Michail Antonio's second-half strike claimed three points for West Ham United as they stretched their unbeaten run to five.
Manuel Lanzini twice went close for the hosts in the first half, while Aaron Cresswell and Said Benrahma linked up well on the Hammers' left.
When Benrahma swung over a deep cross in first-half stoppage time, Vladimir Coufal squared it back for Jarrod Bowen to chest into the net.
Six minutes after the break, the Baggies were level when Matheus Pereira slammed a low, angled shot beyond Lukasz Fabianski.
Eight minutes later Dara O'Shea did brilliantly to head a close-range Lanzini effort off the line, before Declan Rice twice went close.
On 66 minutes, Cresswell's delivery was nodded back across goal by substitute Andriy Yarmolenko, and Antonio hooked in the winner.
There was still time for West Brom substitute Darnell Furlong to shoot just wide in the final minute.
After their third successive league victory West Ham climb to seventh, with 32 points, their highest tally at the halfway point of a Premier League season.
West Brom remain 19th on 11 points.
See: West Ham report | West Brom report
Next fixtures
West Ham: 26 Jan v Crystal Palace (A)
West Brom 26 Jan v Man City (H)
Referee: Graham Scott. Assistants: Neil Davies, Simon Long. Fourth official: Gavin Ward. VAR: Darren England. Assistant VAR: Stephen Child.
WHO'S GOING TO BE YOUR
MAN OF THE MATCH?
Vote at Full-time