Есть массив элементами которого являются объекты. При попытке удаления элемента массива операцией delete (delete objects, сам объект удаляется, но элемент с его бывшем индексом продолжает существовать и равен он undefined! Соответственно длина массива не изменяется. Существуют какие-нибудь способы борьбы с этим злом?
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]
можно даже вышеуказанный код красиво оформить [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]
TheShock как-то некорректно работает ф-ция. я удаляю через selectedElements.splice(key, 1); без присваивания
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]
rar, без проблем. Это Firefug "Свойство prototype позволяет расширить функциональность встроенных объектов JavaScript (String, Date, Array и др.)" http://htmlcoder.visions.ru/JavaScript/?3