sを使って順番にデータを保存array
していますが、ユーザーがリストを反転できる機能を追加したいと考えています。思いつきませんでしたので、どなたかご存知でしたら教えてください。
36 に答える
Javascriptにはreverse()
、配列で呼び出すことができるメソッドがあります
var a = [3,5,7,8];
a.reverse(); // 8 7 5 3
それが「使用できないライブラリ」の意味かどうかはわかりませんが、練習と関係があると思います。その場合は、独自のバージョンの.reverse()
function reverseArr(input) {
var ret = new Array;
for(var i = input.length-1; i >= 0; i--) {
ret.push(input[i]);
}
return ret;
}
var a = [3,5,7,8]
var b = reverseArr(a);
.reverse()
組み込みメソッドは元の配列で動作するため、再割り当てする必要がないことに注意してくださいa
。
Array.prototype.reverse()
この作業を行うために必要なのはそれだけです。適合表をご覧ください。
var myArray = [20, 40, 80, 100];
var revMyArr = [].concat(myArray).reverse();
console.log(revMyArr);
// [100, 80, 40, 20]
const original = [1, 2, 3, 4];
const reversed = [...original].reverse(); // 4 3 2 1
簡潔で、オリジナルを変更せずに残します。
**
逆メソッドを使用しない最短の逆配列メソッド:
**
var a = [0, 1, 4, 1, 3, 9, 3, 7, 8544, 4, 2, 1, 2, 3];
a.map(a.pop,[...a]);
// returns [3, 2, 1, 2, 4, 8544, 7, 3, 9, 3, 1, 4, 1, 0]
a.pop メソッドは最後の要素を取り除き、スプレッド演算子 () を前に置きます
参照用の MDN リンク:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop
これは一時配列を必要としないバージョンです。
function inplaceReverse(arr) {
var i = 0;
while (i < arr.length - 1) {
arr.splice(i, 0, arr.pop());
i++;
}
return arr;
}
// Useage:
var arr = [1, 2, 3];
console.log(inplaceReverse(arr)); // [3, 2, 1]
> var arr = [1,2,3,4,5,6];
> arr.reverse();
[6, 5, 4, 3, 2, 1]
array.reverse()
上記は配列を逆にしますが、元の配列を変更します。元の配列を変更したくない場合は、次のようにします。
var arrayOne = [1,2,3,4,5];
var reverse = function(array){
var arrayOne = array
var array2 = [];
for (var i = arrayOne.length-1; i >= 0; i--){
array2.push(arrayOne[i])
}
return array2
}
reverse(arrayOne)
sort メソッドを使用して反転
- これははるかに簡潔な方法です。
const resultN = document.querySelector('.resultN');
const resultL = document.querySelector('.resultL');
const dataNum = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
const dataLetters = ['a', 'b', 'c', 'd', 'e'];
const revBySort = (array) => array.sort((a, b) => a < b);
resultN.innerHTML = revBySort(dataNum);
resultL.innerHTML = revBySort(dataLetters);
<div class="resultN"></div>
<div class="resultL"></div>
push() を使用しないとどうなりますか !
XOR を使用したソリューション!
var myARray = [1,2,3,4,5,6,7,8];
function rver(x){
var l = x.length;
for(var i=0; i<Math.floor(l/2); i++){
var a = x[i];
var b = x[l-1-i];
a = a^b;
b = b^a;
a = a^b;
x[i] = a;
x[l-1-i] = b;
}
return x;
}
console.log(rver(myARray));
Haskell の実装を js に書き直したところです。
const rev = (list, reversed) => {
if (list.length == 0) return reversed
reversed.unshift(list[0])
return rev(list.slice(1), reversed)
}
const reverse = (list) => rev(list, [])