Когда вы создаёте строковые «индексы» у объекта массива, это просто создаёт новые
свойства у этого объекта, но они не являются
индексами массива. Иногда говорят, «в JavaScript всё является объектом» (что не совсем так). Но массив – это как раз вполне себе объект.
var a = new Array(3); // [null,null,null]
a['aaa'] = 'AAA';
a['bbb'] = 'BBB';
a.length // по-прежнему 3
Т.е. такое обращение с массивом
некорректно. Все методы массива, напр. map(), reduce(), проигнорируют добавленные вами свойства.
Для вашей задачи правильнее создать вместо массива пустой объект:
var ne_array = {};
ne_array['one'] = 1;
ne_array['two'] = 2;
ne_array['three'] = 3;
for( var property in ne_array) {
console.log( property, ne_array[ property]);
}