2016-04-05 4 views
5

たぶん間違ったキーワードを検索しているかもしれませんが、2つの配列値を入れ替えるJavaScript(例:ES2015 +)関数の例を探しています。非突然変異(不変)な方法で。純粋なJSを使用してこれをやりたいのですが、不変性ライブラリを追加する必要はありません。ES2015非突然変異アレイスワップReactコンポーネント(またはフラックスアクション)

例えば、私が[1, 2, 3, 4, 5, 6]を持っていれば、新しい配列[1, 2, 4, 3, 5, 6]を返す関数に3と4(あるいはおそらくインデックス)を渡したいと思います。私はこれを行ういくつかの方法を見つけましたが、値を直接置き換えて配列を変更します。私は不変の方法が必要です。私は多分スライスを使用して推測していますか?もしそれが問題で配列が状態値なら、これはReactコンポーネントです。

TIA!

+1

( 'slice'を使用して)配列をクローンしてからスワップするだけです。 – Bergi

+0

@ JaredSmith:これは 'firstIndex'と' secondIndex'の間の要素を見逃しているように見え、最後の要素も削除します。 – Bergi

答えて

6

ないES6(まだそれを学習)

function swap(array, first, second){ 
 
    var final = array.slice(); 
 
    temp = final[first]; 
 
    final[first] = final[second]; 
 
    final[second] = temp; 
 
    return final 
 
}

ES6のおかげで@Benjaminする

const swapIndices = (array,index1,index2) => { 
 
    const newArray = array.slice(); 
 
    newArray[index1] = array[index2]; 
 
    newArray[index2] = array[index1]; 
 
    return newArray; 
 
}

+1

'' 'const swapIndices =(配列、インデックス1、インデックス2)=> { const newArray = array.slice(); newArray [index1] =配列[index2]; newArray [index2] =配列[インデックス1]; return newArray; } swapIndices(アレイ、2,3) => [1、2、4、3、5、6] '' ' 私はこのようにそれを行うだろうと思いますか? 、改行あり:P – Benjamin

1
function swap(arr, i1, i2) { 
    // i1 must be lower 
    if (i1 > i2) i1 = [i2, i2 = i1][0]; 
    return arr 
     .slice(0,i1) 
     .concat(arr[i2]) 
     .concat(arr.slice(i1+1,i2)) 
     .concat(arr[i1]) 
     .concat(arr.slice(i2+1)) 
} 
たぶん

完璧ではないが、飛び石:)

関連する問題