Although they were not at their best, the Hammers got the breakthrough in the 66th minute when Kevin Nolan took advantage of some poor defending to finish from close range.
And that was enough for West Ham to join the Saints on 47 points as seconds after Nolan's goal, Jake Forster-Caskey pounced on an error from Kelvin Davies to put Brighton 1-0 up against Southampton en route to a 3-0 win.
Matthew Sparrow doubled the lead in the 76th minute and then scored again four minutes from time to sink Southampton, who suffered a second straight defeat, having had Rickie Lambert sent off for the first time in his career following a clash with Adam El-Abd early in the second half.
Brighton also finished with 10 men following the late dismissal of Gordon Greer, but it did nothing to affect the final outcome.
Middlesbrough could have gone top with a victory at Blackpool, but instead suffered a 3-0 reverse as Lomano LuaLua and Matt Phillips ran riot.
LuaLua set up Phillips for the first in the 50th minute, then turned in the second following a fine run from Ludovic Sylvestre.
Phillips was at the heart of the third, with his low ball turned into his own net by Seb Hines.
Cardiff joined Middlesbrough on 45 points with a 3-1 victory over Reading, doing all the hard work in the first half.
Joe Mason got the first in the 13th minute and it was 2-0 when Aron Gunnarsson headed in Peter Whittingham's corner six minutes later.
Whittingham was the provider again for the third, with a fine pass setting up Kenny Miller for the finish nine minutes before half-time.
Reading gave themselves hope with a Jobi McAnuff goal on the stroke of half-time, but could not find a way back.
Having gone seven games without a goal, lowly Nottingham Forest needed only five minutes to find the net at Portman Road, where they beat Ipswich 3-1.
Andy Reid teed up Marcus Tudgay to grab the first, and it was 2-0 soon after when Garath McCleary netted.
Grant Leadbitter got one back for the hosts from the penalty spot in the 76th minute, but Tudgay made sure for Forest moments later with his second of the match.
Leeds scored twice in the closing stages to snatch a 2-1 win over 10-man Burnley, who looked on course for an unlikely victory and a fourth straight defeat for the hosts.
The Clarets were down to 10 men in the 29th minute after Kieran Trippier picked up two yellow cards in the space of seven minutes, but led through Charlie Austin's 69th-minute goal.
But Brian Easton put through his own net in the 88th minute and Ross McCormack stole the points deep into added time.
Derby leapfrogged Hull in the battle for a play-off place with a 1-0 away win at the KC Stadium, Theo Robinson scoring 32 seconds into the second half.
In the early game, Neil Danns dealt a blow to the play-off hopes of his former club Crystal Palace as he led Leicester to a 2-1 win at Selhurst Park.
Danns, who left Palace on a free transfer in the summer, opened the scoring before setting up Sol Bamba for the second.
Jonathan Parr got one back for Palace, but they could not deny Leicester a first win in six game.
Doncaster climbed off the foot of the table with a 2-0 win over Barnsley, James Hayter and Kyle Bennett getting the goals.
A Marlon King penalty in the last minute rescued a 1-1 draw for Birmingham at Peterborough, who led after just 29 seconds through Emile Sinclair.
Portsmouth beat Watford 2-0 with goals from Marko Futacs and Hayden Mullins, with Hornets goalkeeper Scott Loach sent off late on.