A simple solution:
local final_position
-- set final position to something
-- Define a distance function that takes a grid position
-- and returns the distance to the final position
local distance = function(start)
return math.abs(start.x - final_position.x) + math.abs(start.y - final_position.y)
end
-- Define a comparator that compares locations based on
-- distance to final position
local comparator = function(a, b)
return distance(a) < distance(b)
end
local adj_tiles
-- Set adj_tiles to an array of grid positions
table.sort(adj, comparator) -- Sort adjacent tiles based on distance
local nearest = adj[1] -- Closest is now the first item in the array