2017-01-16 9 views
1

私は学校から持っているエクササイズに問題があります。配列内の指定されたインデックス番号の場所をスワップする方法(JavaScript)

2つのインデックスを与えられた配列内の2つの数字を入れ替える必要があります。ここでHere are the test cases.

は私のコードです:

function swap(xs, i, j) { 
    var copyxs = xs.slice(0); 
    for (var a = 0; a < xs.length - 1; a++) { 
     if (xs.indexOf(copyxs[a]) == i) { 
      xs[a] = copyxs[j]; 
     } 
     if (xs.indexOf(copyxs[a]) == j) { 
      xs[a] = copyxs[i]; 
     } 
    } 
    return xs; 
} 

答えて

1

あなたはスワップする必要が配列のインデックスを持っているとして、あなたは配列の要素をスライスしてループするそれを行う必要はありません。 だけtemp変数のインデックス値のいずれかを保持し、以下に示すような値を再割り当て:

function swap (xs, i, j){ 
 
    var temp = xs[j]; 
 
    xs[j] = xs[i]; 
 
    xs[i] = temp; 
 
    return xs; 
 
} 
 

 

 
console.log(swap([1,2,3], 0, 1))

+1

ああ、ずっといい方法をありがとう!しかし、私の方法がうまくいかない理由はまだ分かりません。 – RandomStacker

1

必要がありませんsliceに配列、あなただけで値を再割り当てすることができます指定されたインデックス:

function swap(arr, i, j) { 
    var temp = arr[i]; //temporarily store original value at i position 
    arr[i] = arr[j]; //reassign value at i position to be value at j position 
    arr[j] = temp; //reassign value at j position to original value at i position 
    return arr; 
} 
+0

ありがとうございます! – RandomStacker

1

先生が入力配列を変更する必要がない場合は、マップでこれを行うことができます。

var input = [1,2,3,4,5,6]; 
 
    var swap = (xs, i, j) => xs.map((x,index,arr) => { 
 
     if (index === i) return arr[j]; 
 
     if (index === j) return arr[i]; 
 
     return x; 
 
    }); 
 
    console.log(swap(input, 2, 4));
か古い機能で:

var input = [1,2,3,4,5,6]; 
 
    function swap(xs, i, j) { 
 
     return xs.map((x,index,arr) => { 
 
     if (index === i) return arr[j]; 
 
     if (index === j) return arr[i]; 
 
     return x; 
 
     }); 
 
    } 
 
    console.log(swap(input, 2, 4));

関連する問題