How do I Spawn a random gameObject from Array1, at a random position of gameObjects from Array2 ?

My game is a board game (chess-like). The squares of the board that are empty, change during play, as my main object moves and eat various collectibles.

I have a script, that will spawn one random collectible in a random empty square, everytime I (manipulating my main object) eat a collectible.

This script will do it, using 2 Arrays:

1) the first Array, is this of the empty squares. It is actually an array of game objects. These game objects are empty game objects with a box collider, each of which sit on each one of the boards squares. Their tags change (full <-> empty) depending on whether there is a game object (my main game object or a collectible) on them, so this first Array updates each time I move my game object and is redifined, by the empty game objects with the empty tag.

2) the second Array is fixed. It is comprised of the collectibles that will randomly get spawned at one of the empty board squares, each time I eat a collectible.

How would I spawn a random game object from the 2nd Array, at one random position of the 1st Arrays empty game objects (that actually represent the empty squares of the board)?

So, Instantiate (WHAT, WHERE); ?

var objectsToSpawn : Object[];
var spawnLocations : Transform[];
var spawnOffset : Vector3; // where to spawn the objectsw relative to the grid tiles

function SpawnOne() : GameObject {
  var thingToSpawn : int = Random.Range( 0, objectsToSpawn.length );
  var placeToSpawn : int = Random.Range( 0, spawnLocations.length );
  var newObject : GameObject = Instantiate( 
    objectsToSpawn[ thingToSpawn ],
    spawnLocations[placeToSpawn].position + spawnOffset,
    Quaternion.identity );
  return newObject;