Как переместить элемент массива?

319
09 декабря 2017, 09:31
var arr_ = [1,2,3,4];
var oldPlace = 0;
var newPlace = 2;

Чтобы массив принял вид: [2,1,3,4];

То есть мы берем элемент под индексом 0, вытаскиваем его из массива и вставляем в указанный индекс 2 этого же массива. Вставляем перед указанным индексом.

Answer 1

Попробуйте так:

const arr = [1,2,3,4]; 
 
const swapArray = function(arr, oldPlace, newPlace) { 
    // Проверим выход за пределы массива 
    if((Math.min(oldPlace, newPlace) < 0) || (Math.max(oldPlace, newPlace) >= arr.length)) { 
      console.error('Out of range') 
      return null; 
    } 
    const item = arr.splice(oldPlace, 1); 
    arr.splice((newPlace > 0)? newPlace-1: 0, 0, item[0]) 
    return arr; 
} 
 
 
console.dir(swapArray(arr, 0, 2)); 
console.dir(swapArray(arr, 2, 0));

Обратите внимание, функция изменяет исходный массив! Можно сделать "безопасную" функцию:

  const arr = [1,2,3,4]; 
 
    const safeSwapArray = function(inputArr, oldPlace, newPlace) { 
        const arr = inputArr.slice();   // Копируем массив 
        // Проверим выход за пределы массива 
        if((Math.min(oldPlace, newPlace) < 0) || (Math.max(oldPlace, newPlace) >= arr.length)) { 
          console.error('Out of range') 
          return null; 
        } 
        const item = arr.splice(oldPlace, 1); 
        arr.splice((newPlace > 0)? newPlace-1: 0, 0, item[0]) 
        return arr; 
    } 
 
 
    console.dir(safeSwapArray(arr, 0, 2)); 
    console.dir(arr);

Answer 2
var arr_ = [1,2,3,4];
 var oldPlace = 0;
var newPlace = 2;
var t = arr_.splice(oldPlace,1);
//после того как удалите элемент из массива, у него изменится длина
arr_.splice(newPlace-1,0,t[0]);
console.log(arr_)
Answer 3
function replc(oldPlace,newPlace,arr) {
    if(oldPlace === arr.length-2 && newPlace === 0) return arr;
    return arr.splice(newPlace-1,0,arr.splice(oldPlace,1)[0]);
}
READ ALSO
Анимация сворачивающейся коробки

Анимация сворачивающейся коробки

Интересуют примеры реализации сворачивания-разворачивания коробки по её развёртке (CSS, Canvas, SVG), буду очень признателен

252
Альтернативы .addClass() и .removeClass()

Альтернативы .addClass() и .removeClass()

Являюсь новичком в деле JS-разработкиОпыт написания работоспособных программ был

245
gif + php. Наложить текст на анимацию

gif + php. Наложить текст на анимацию

Доброго времени суток! Подскажите, плиз, как проще всего наложить текст поверх анимированного gif и отправить его по почте с сервера?

295