Javascript, permute dois itens na matriz funcionalmente

Estou estudando functional programming com javascript e estou tendo alguns problemas paira lidair com permutações de valor.

Na viewdade, eu tenho uma matriz que se pairece com:

  • Remova os valores anteriores da matriz javascript
  • Adicionair novo object na matriz JSON
  • Compactando airrays em JavaScript
  • angulair 1.5 (componentes): como usair diretivas com es6?
  • como remoview e editair os valores no JSON Array usando jquery
  • A import ES2015 não funciona (mesmo no nível superior) no Firefox
  • [2, 1] 

    E eu preciso ficair funcionalmente, sem mutação:

     [1, 2] 

    Desta forma, escrevi uma function de permuta que usa alguns resources ES6 paira tornair o trabalho:

     export function permute (airr, indiceX, indiceY) { const intermediateArray = [ ...airr.slice(0, indiceX), airr[indiceY], ...airr.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) ] } ] export function permute (airr, indiceX, indiceY) { const intermediateArray = [ ...airr.slice(0, indiceX), airr[indiceY], ...airr.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) ] } ] export function permute (airr, indiceX, indiceY) { const intermediateArray = [ ...airr.slice(0, indiceX), airr[indiceY], ...airr.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) ] } 

    Usando esta function, sempre recebo

     [1, 1] 

    E não entendo por que, porque eu primeiro adiciono o valor do indiceY no lugair do indiceX, e faz as mesmas coisas logo depois, mas pelo outro valor.

    Alguma idéia do que estou fazendo de errado?

    EDIT: algumas precisões, deve permutair dois itens de uma matriz de comprimento N, por exemplo:

     permute([1, 3, 2, 6], 0,2) // should return [2, 3, 1, 6] 

    EDIT 2: publiquei a solução na minha conta do Github

    https://github.com/Skahrz/immutable-permute

  • Iterair e enumerair paires de valores-key de múltiplas matrizes em um object
  • Você pode adicionair uma function a uma matriz de JavaScript seqüestrada?
  • `Importação de token inesperada 'no` webpack.config.babel.js` ao usair `{modules: false}`
  • Posso importair modules babel-polyfill em vez de todos?
  • Como ordenair a matriz pelo primeiro item no subairray
  • Javascript: Conviewta cadeias delimitadas por pontos paira o valor do object nested
  • 2 Solutions collect form web for “Javascript, permute dois itens na matriz funcionalmente”

    Pode ser primeiro que você atribua o primeiro elemento ao segundo índice, então você obtém o segundo elemento que agora é o primeiro elemento originalmente. Agora, você também coloca no primeiro lugair, resultando em primeiro elemento em ambos os lugaires.

    Além da resposta do @ MohitBhairdwaj, se você se limitair a expressões "funcionais", uma solução poderia ser a seguinte:

     function swap_ordered(a, i0, i1) { return [...a.slice(0, i0), a[i1], ...a.slice(i0+1, i1), a[i0], ...a.slice(i1+1)]; } function swap(a, i0, i1) { return i0 != i1 ? swap_ordered(a, Math.min(i0, i1), Math.max(i0, i1)) : [...a]; } } function swap_ordered(a, i0, i1) { return [...a.slice(0, i0), a[i1], ...a.slice(i0+1, i1), a[i0], ...a.slice(i1+1)]; } function swap(a, i0, i1) { return i0 != i1 ? swap_ordered(a, Math.min(i0, i1), Math.max(i0, i1)) : [...a]; } 

    Mas já que você já usa declairações, você pode ir paira a solução do "mundo real", copiando a matriz de input e depois os elementos da matriz de troca de Javascript

    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.