splice массива массивов
Доброго времени суток.
Что-то не работает моя задумка... Есть массив (arr), все его элементы тоже массивы. В родительском массиве мне нужно поменять местами элементы, делаю примерно так: // сохраняю элемент массива var temp_var = arr.splice(some_index, 1); // вставляю его ниже следующего элемента arr.splice((some_index++), 0, temp_var); Получается, что нижний элемент оказывается сверху, бывший верхний снизу, но имеет тип undefined. После var temp_var = arr.splice(some_index, 1); алертом проверял переменную, который показал, что она - объект, который содержит все элементы дочернего массива. Разъясните, пожалуйста, в чем я заблуждаюсь? Спасибо. |
vahrusha, Вам нужно их сортировать? Метод splice удаляет элементы или заменяет удалённые новыми
|
проверьте существуетли элемент массива arr[some_index++] после того как вы удалили arr[some_index]
может так проще менять элементы массива местами: Array.prototype.exchange = function (a, b) { if (this[a] && this[b]) { var c = this[a]; this[a] = this[b]; this[b] = c } return this }; var arr=[[1,1,1,1,1],[2,2,2,2,2],[3,3,3,3,3],[4,4,4,4,4],[5,5,5,5,5]]; alert(arr.exchange(0,1)); |
Да, так действительно много легче. Я новичек в программировании, поэтому все прелести ООП не освоил, а Ваш пример очень подходит для меня.
Спасибо отписавшимся. |
var arr=[[1,1,1,1,1],[2,2,2,2,2],[3,3,3,3,3],[4,4,4,4,4],[5,5,5,5,5]]; var some_index = 2; var temp_var = arr.splice(some_index, 1); arr.splice(some_index+1, 0, temp_var); alert(arr); и рони правильно советует, только не change (изменить), а swap или exchange |
Метод, который предложил рони очень хорош, но в этом случае, как я понял индексы элементов остаются прежними (порядок меняется), получается что-то вроде:
arr[0], arr[1], arr[3], arr[2] ... Эх, а порядок индексов мне важен. Как-нибудь можно сделать, чтобы в массиве индексы расставить по порядку, не меняя местами содержание элементов при этом. Спасибо. |
Виноват, метод индексы меняет автоматически. Заблуждения возникли вот по какой причине...
Функционал я задумал такой: нажимаем кнопочку - элемент списка(массива) с пускается на одну позицию вниз (метод, предложенный рони). Когда элемент таким образом спускается в самый низ, кнопку я скрываю. примерно так: ... if(elem_index == (arr.length-1)){ document.getElementById('some_id').className = 'hide'; }else{ document.getElementById('some_id').className = 'show'; } Почему то кнопка не скрывается. НО если сделать так: alert(elem_index); alert(arr.length-1); if(elem_index == (arr.length-1)){ document.getElementById('some_id').className = 'hide'; }else{ document.getElementById('some_id').className = 'show'; } То после двух алертов окон, она скрывается! Как это понимать? |
шутка от разработчиков браузера :) а если серьезно - отлаживать надо, причем советую тебе firefox+firebug+console.log вместо alert. И ты даже не сказал, выполняется ли условие в этих вариантах, назначается ли класс. Можешь, в принципе, попробовать дать ссылку на страницу
Цитата:
|
Что интересно, условие выполняется и класс меняется (а в классе display:none), но кнопка все равно отображается.
Такая проблема с этой функцией (которая скрывает кнопку), возникает только тогда, когда она работает в паре с методом, который предложил рони. Т.е. если просто выбрать нижний элемент, кнопка нормально скрывается. Могу конечно и ссылку на страницу дать, но там много "букаф"... |
Понял я причину бедствий.
У меня на скрываемой кнопке вот что было понавешано: <div id="down_cat_but" title="Переместить категорию вниз по списку" class="but1" style="width:20px;margin:10px 5px 10px 0;float:left" onmouseover="this.className='but2';" onmousedown="this.className='but3';" onmouseup="this.className='but2';" onmouseout="this.className='but1';" onclick="movecat();"> Когда я перемещал элемент вниз (кликал по кнопке), курсор то оставался над кнопкой - ей присваивался класс "d-n", и сразу тот, что на mouseover, и кнопка оставалась видимой. А когда я алерты добавлял, то мышкой по ОК кликал - курсор с кнопки убирал, событие onmouseover не срабатывало... :D Вот так вот. |
Часовой пояс GMT +3, время: 16:29. |