Связывание соединительного массива не работает

Я пытаюсь понять, почему в nodejs array splice не работает в ассоциированном массиве.

var a = [];

a['x1'] = 234234;
a['x2'] = 565464;

console.log("Init-------");
showIt();

a.splice(0, 1);
console.log("After splice-------");
showIt();

delete a['x1'];
console.log("After delete-------");
showIt();

function showIt(){
    var keys = Object.keys(a);
    var len  = keys.length;
    var i=0;
    while (i < len) {
        console.log( '    ' + i +  ' ------------ ' + keys[i] );
        i++;
    }
}

Результаты:

Init-------
        0 ------------ x1
        1 ------------ x2
After splice-------
        0 ------------ x1
        1 ------------ x2
After delete-------
        0 ------------ x2

Слияние массива ничего не делает...

Те же результаты в браузере...

Update:

Сплайка работает как ожидалось, когда массив определяется как:

var a = ['x1','x2','x3'];
console.log("Init-------");
console.log(a);

a.splice('x1', 1);
console.log("After splice-------");
console.log(a);

Похоже, что в первом примере массив обрабатывается так, как если бы он был определен как объект {} во втором, его обрабатывали больше как массив.

Модераторам:

Это не вопрос о запасных массивах, это скорее вопрос о массиве, который начинается с 0 и последовательно увеличивается до 10 миллионов в течение нескольких дней. По мере того, как он растет, массив удаляется из-за того, что около 1000 элементов находятся в массиве за один раз.

Я рассматриваю возможность использования хэш-таблиц с помощью нечисловых ключей или определения как объекта {}, так что он действует как разреженный массив.

В конце концов, я не уверен, имеет ли это значение...

Ответы

Ответ 1

В JavaScript нет такой вещи, как ассоциативный массив - существуют массивы (например, обычные массивы на других языках) и объекты (например, массивы массивов на других языках). В вашем примере a является обычным массивом, но вы устанавливаете на нем нечисловые ключи, поэтому обычные методы массива (например, сплайсинг) не видят его. Они видны только в диапазоне 0...a.length.

Создание a объект не поможет; невозможно соединить объект. Попробуйте использовать только числовые ключи ([1] вместо ['x1']).