Я изучаю функциональное программирование с помощью javascript, и у меня возникают проблемы с перестановками значений.Javascript, переставлять два элемента в массиве функционально
На самом деле, у меня есть массив, который выглядит как:
[2, 1]
И мне нужно, чтобы получить функционально, без мутации:
[1, 2]
Таким образом, я написал функцию переставлять, что использует некоторые особенности ES6 к делает работу:
export function permute (arr, indiceX, indiceY) {
const intermediateArray = [
...arr.slice(0, indiceX),
arr[indiceY],
...arr.slice(indiceX + 1)
]
console.log([
...intermediateArray.slice(0, indiceY),
intermediateArray[indiceX],
...intermediateArray.slice(indiceY + 1)
]) // prints [1, 1]
return [
...intermediateArray.slice(0, indiceY),
intermediateArray[indiceX],
...intermediateArray.slice(indiceY + 1)
]
}
с помощью этой функции, я всегда получаю
[1, 1]
И я не понимаю, почему, потому что я первый добавить значение indiceY на месте indiceX, и делает тот же самый материал только после, но и для другого значения ..
Любая идея, что я Неправильно?
EDIT: Некоторые уточнения, он должен переставлять два элемента массива длины N, например:
permute([1, 3, 2, 6], 0,2) // should return [2, 3, 1, 6]
EDIT 2: Я опубликовал решение на моем GitHub счет
https://github.com/Skahrz/immutable-permute
Должно быть, это просто реверсирование предметов? – RomanPerekhrest
Может быть, сначала вы назначаете первый элемент второму индексу, тогда вы получаете второй элемент, который теперь фактически является изначально первым элементом. Теперь вы помещаете его на первое место, в результате чего первый элемент находится в обоих местах. –
Во второй раз я помещаю его в индекс с индексом indiceX, напротив первого раза. Так что это должно быть хорошее значение нет? – mfrachet