2017-12-19 7 views
-2

私はどのように私は私が3つの以下の配列を取得するために期待してい2つのスワップ値(a[i] swapped with a[i+1]2つの値を交換するたびに新しい配列を返す方法はありますか?

で新しい配列を返すループ配列let a = [1, 3, 4, 2]

を作成しますしている:

1. [3, 1, 4, 2] 
2. [1, 4, 3, 2] 
3. [1, 3, 2, 4] 

を私はmap,splice()およびslice()を使用しようとしましたが、期待される結果が得られませんでした。

+0

を必要としなければならないすべてであります? –

+2

私はあなたがたくさん試したことがないと思います – klugjo

+0

'map'と' slice'を試してみましたか? – Bergi

答えて

1

マップは、あなたはループが3つの異なる値を "返す" ことを期待しますか

let a = [1, 3, 4, 2]; 
 
let r = []; 
 
for (let i = 0; i < a.length - 1; i++) { 
 
    r[i] = a.map((v, index) => { 
 
     if(index == i) return a[i+1]; 
 
     if(index == i + 1) return a[i]; 
 
     return v; 
 
    }); 
 
} 
 
console.log(r);

1

単純なforループ:ループ内

let a = [1, 3, 4, 2], 
 
    result = []; 
 

 
for(let i = 0; i < a.length - 1; i++) {  // notice that the loop ends at 1 before the last element 
 
    let copy = a.slice(0);     // copy the array 
 
    let temp = copy[i];      // do the swaping 
 
    copy[i] = copy[i + 1]; 
 
    copy[i + 1] = temp; 
 
    result.push(copy);      // add the array to result 
 
} 
 

 
console.log(result);

関連する問題