За последние 24 часа нас посетили 20538 программистов и 1824 робота. Сейчас ищут 1030 программистов ...

Удаление элемента массива

Тема в разделе "JavaScript и AJAX", создана пользователем rar, 22 июл 2009.

  1. rar

    rar Активный пользователь

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Есть массив элементами которого являются объекты. При попытке удаления элемента массива операцией delete (delete objects;), сам объект удаляется, но элемент с его бывшем индексом продолжает существовать и равен он undefined! Соответственно длина массива не изменяется. Существуют какие-нибудь способы борьбы с этим злом?
     
  2. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    http://www.w3schools.com/jsref/jsref_obj_array.asp
    pop()
    shift()

    Если нужно убрать из середины массива, то к сожалению придётся делать это руками - сдвигать следующие за убираемым элементом элементы в ручную перебором цикла. Хотя лучше через slice:

    [js]
    function removeIndex(index, array)
    {
    array = array.slice(0, index).concat(array.slice(index+1));
    return array;
    }
    var testArr = new Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
    testArr = removeIndex(4, testArr); // Убираем 5-ку
    var str = '';
    for (var i in testArr) {
    str += testArr+', ';
    }
    alert(str);
    [/js]
     
  3. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    можно даже вышеуказанный код красиво оформить

    [js]Array.prototype.removeIndex = function (index) {
    return this.slice(0, index).concat(this.slice(index+1));
    }
    var testArr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    console.log(testArr.removeIndex(4)); // [1, 2, 3, 4, 6, 7, 8, 9, 10][/js]
     
  4. rar

    rar Активный пользователь

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Спасибо.
    Посоветуйте книгу по JavaScript для профессионального программирования.
     
  5. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    TheShock
    как-то некорректно работает ф-ция.

    я удаляю через
    selectedElements.splice(key, 1);
    без присваивания
     
  6. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Действительно. Быдлокодинг получился какой-то...

    rar, ничего посоветовать не могу - не читал.
     
  7. rar

    rar Активный пользователь

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    На примере показать можете?
     
  8. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    rar, что ж непонятного то?

    [js]
    Array.prototype.remove = function (index) {
    this.splice(index, 1);
    return this;
    }
    var testArr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

    console.log(testArr.remove(4)); // [1, 2, 3, 4, 6, 7, 8, 9, 10] [/js]
     
  9. rar

    rar Активный пользователь

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Не моли бы объяснить вот эти строчки:

    Array.prototype
    console.log
     
  10. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    rar, без проблем.

    Это Firefug

    "Свойство prototype позволяет расширить функциональность встроенных объектов JavaScript (String, Date, Array и др.)"
    http://htmlcoder.visions.ru/JavaScript/?3
     
  11. rar

    rar Активный пользователь

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Большое спасибо.