getElementsBy возвращает не массив, а массиво-подобный объект NodeList, причём живой(при удалении\добавлении элементов он изменится автоматически). Так что вам придётся заводить отдельный массив, либо приводить NodeList к массиву:
q = Array.prototype.slice.call(document.getElementsByName("as"));