iOS12 SafariのJavaScript Arrayのreverseが効かないバグに注意

iOS12 Safariのreverseバグとは

iOS12 SafariのJavaScriptのreverseで配列が反転しないバグが存在する。

通常は[1, 2, 3]を[1, 2, 3].reverse()にすれば配列は[3, 2, 1]と反転するがiOS12 Safariは[1, 2, 3]のままになってしまう。
通常は[1, 2, 3]を[1, 2, 3].reverse()にすれば配列は[3, 2, 1]と反転するがiOS12 Safariは[1, 2, 3]になってしまう

var a = [1, 2, 3];
alert(
  a + '\n' +
  a.reverse()
);

iOS12 Safariのreverse確認用サンプル

iOS12 Safariのreverseバグの対処法

iOS12 Safariのreverseバグは影響が大きいのですぐに修正されるだろう。

修正されてしばらく経過するまではreverse関数を作成して代替で使用すると良い。

// この関数は非破壊的(a.slice().reverse()と同等)なので
// 本来の破壊的(a.reverse())使用なら変数に上書きする、
function reverse(arr) {
  var temp = [];
  arr.forEach(function(a, i) {
    temp.push(arr[arr.length - i - 1]);
  });
  return temp;
}
var a = [1, 2, 3];
alert(
  a + '\n' +
  reverse(a)
);