The defeat pushes the Baggies further into the mire, and heaps the pressure on boss Alan Irvine.
The home side had taken the lead just 10 minutes into the game through Craig Dawson; and it seemed to knock the confident Hammers who started the day in fifth.
James Tomkins’ nightmare start was compounded when he was beaten for pace by the recalled Victor Anichebe, and Dawson evaded the visiting defence to head home.
But West Brom could not maintain their lively start and the Londoners grew into the game with captain Kevin Nolan getting more involved alongside striker Andy Carroll.
It wasn’t long before they levelled and it was through that man Nolan. Just after the half an hour mark, Ben Foster parried Carroll’s bicycle-kick and Nolan headed home.
Then on the stroke of half-time, Tomkins redeemed himself to give the Irons the lead, powering in a header from Stewart Downing’s corner.
Irvine clearly gave his men a talking to as they pushed forward to get an equaliser. Anichebe and England starlet Saido Berahino both had half-chances but failed to trouble Adrian sufficiently.
By the end of the game, the home side had four strikers on the pitch including Silvestre Varela who gave Carl Jenkinson a challenge as he sent some probing balls into the box, but Tomkins, Winston Reid and substitute James Collins held firm.
The home side eventually made the Londoners’ goalkeeper work as Anichebe got himself into some good space but his snapshot was well saved.
It looked like they may get a point when the ball fell kindly to Dorrans on the edge of the penalty area. He could only direct his shot wide of the post before the final chance of the game fell to first-half scorer, Dawson, but his volley was well blocked as the Hammers held on.
West Brom: Foster (6), Wisdom (5), Lescott (6), Dawson (6), Baird (5), Gardner (4), Brunt (6), Dorrans (6), Berahino (6), Sessegnon (5), Anichebe (6).
Subs: Mulumbu (5), Varela (6), Ideye (4).
West Ham: Adrian (7), Jenkinson (6), Tomkins (7), Reid (7), Cresswell (7), Kouyate (6), Nolan (8), Amalfitano (6), Downing (7), Zarate (6), Carroll (7).
Subs: Collins (5), Cole (5), Valencia (5).
Man of the Match: Kevin Nolan