2016-11-22 10 views
2

Как можно chenge 3/4 элементов? Ожидаемый выход [1,2,4,3,5]Неизменяемые элементы - изменения в массиве с срезом (без сращивания)

let list = [1,2,3,4,5]; 
const removeElement = list.indexOf(3); // remove number 3 
list.slice(0, removeElement).concat(list.slice(removeElement+1)) // [1,2,4,5] 

... следующий толчок номер 3 после того, как номер 4 без сращивания

+0

Но почему без сращивания? Сплайн предназначен для этой цели ... – Dellirium

ответ

5

ломтик не мутировать массив, на котором он работает так что вам нужно присвоить значение, что она возвращает

let list = [1,2,3,4,5]; 
const removeElement = list.indexOf(3); // remove number 3 
var newList = list.slice(0, removeElement).concat(list.slice(removeElement+1)) // [1,2,4,5] 

Если вы готовы использовать синтаксис ES2015, вы можете использовать распространять оператора следующим образом:

const removeElement = list.indexOf(3); // remove number 3 
var es6List = [ 
    ...list.slice(0, removeElement), 
    ...list.slice(removeElement+1) 
]; 
console.log(es6List); 

fiddle

3
var list = [1,2,3,4,5]; 
var numToRemove = 3; 

var removeElementIndex = list.indexOf(numToRemove); 
var afterRemoveElement = list[removeElementIndex+1]; 

list.slice(0, removeElementIndex).concat(afterRemoveElement).concat(numToRemove).concat(list.slice(removeElementIndex+2)) // [1,2,4,3,5] 
+0

Спасибо !!! Эта работа прекрасна :) –

+0

Пожалуйста, поддержите полезные ответы – Joe

+0

Приобретено только для Joe – Rachmaninoff

3

Самый простой способ записать это использовать спред оператора:

let newList = [...list.slice(0, 2), list[4], list[3], ...list.slice(4)]; 
0

Массивы являются объектами, используйте Object.assign() и элементы доступа с выражениями имя свойства ,

var numToMove = 2; 
console.log(Object.assign(list, {[numToMove]: list[numToMove+1]}, 
{[numToMove+1]: list[numToMove]})); 
// [1, 2, 4, 3, 5]