copyWithin【内部コピー】メソッド
fill【指定値設定】メソッド
reverse【要素反転】メソッド
sort【ソート】メソッド

Array.prototype.copyWithin【内部コピー】メソッド

メモ

  • 配列内の要素をコピー(上書き)し配列を変更
  • コピーはシャローコピー (コピー元のオブジェクトは新規生成されずに同じ参照)
  • コピー元とコピー先に重なりがあっても正しくコピー (内部でコピー順を調整)
  • 配列の範囲を超えてのコピーは行わない
  • コピーの方向が逆の場合、処理なし (コピー元の終了位置 < コピー元の開始位置)

構文

copyWithin ( target, start [ , end ] )

  • target:コピー先の要素インデックス
    説明
    範囲外補正
    0 ≦ target先頭からの要素インデックス
    target < 0
    (-1:末尾)
    末尾からの要素インデックス (要素数 - target)
  • start:コピー元の開始要素インデックス
    説明
    範囲外補正
    0 ≦ start先頭からの要素インデックス
    start < 0
    (-1:末尾)
    末尾からの要素インデックス (要素数 - start)
  • end:コピー元の終了要素インデックス (この位置は含まない)
    説明
    省略要素数
    範囲外補正
    0 ≦ end先頭からの要素インデックス
    end < 0
    (-1:末尾)
    末尾からの要素インデックス (要素数 - end)

  • 変更後の元の配列 (配列変更)

var array = [ 0, 1, 2, 3, 4, 5, 6, 7 ];
var arrayNew = array.copyWithin(5, 1, 3);
console.log(arrayNew);  // 出力:[0, 1, 2, 3, 4, 1, 2, 7]
console.log(array);     // 出力:[0, 1, 2, 3, 4, 1, 2, 7] 元の配列を変更

array = [ -8, -7, -6, -5, -4, -3, -2, -1 ];
array.copyWithin(-8, -3);
console.log(array);     // 出力:[-3, -2, -1, -5, -4, -3, -2, -1]

// シャローコピー
var arrayInner = [ 10, 20 ];
array = [ 0, arrayInner, 2 ];
array.copyWithin(2, 1);
console.log(array);     // 出力:[0, Array[2], Array[2]]
console.log(array[1]);  // 出力:[10, 20]
console.log(array[2]);  // 出力:[10, 20]
array[1][0] = 100;
console.log(array[1]);  // 出力:[100, 20]
console.log(array[2]);  // 出力:[100, 20] 参照のため変更
// 【~Array【型指定配列ビュー (%TypedArray%)】オブジェクト】
var array = [ 0, 1, 2, 3, 4, 5 ];
var typedArray = new Int32Array(array);
typedArray.copyWithin(3, 1, 4);
console.log(typedArray);        // 出力:[0, 1, 2, 1, 2, 3]
// 【コピー範囲の重なり】
var array1 = [ 0, 1, 2, 3, 4, 5, 6, 7 ];
array1.copyWithin(0, 2, 6);
console.log(array1);        // 出力:[2, 3, 4, 5, 4, 5, 6, 7]
var array2 = [ 0, 1, 2, 3, 4, 5, 6, 7 ];
array2.copyWithin(4, 2, 6);
console.log(array2);        // 出力:[0, 1, 2, 3, 2, 3, 4, 5]
// 【配列の範囲を超えてのコピーなし】
var array = [ 0, 1, 2, 3, 4, 5, 6, 7 ];
array.copyWithin(5, 0, 7);
console.log(array);         // 出力:[0, 1, 2, 3, 4, 0, 1, 2]
// 【逆方向】
array = [ 0, 1, 2, 3, 4, 5, 6, 7 ];
array.copyWithin(5, 3, 1);  // 処理なし
console.log(array);         // 出力:[0, 1, 2, 3, 4, 5, 6, 7]

Array.prototype.fill【指定値設定】メソッド

メモ

構文

fill ( value [ , start [ , end ] ] )

  • value:設定値
  • start:設定開始要素インデックス
    説明
    範囲外補正
    0 ≦ start先頭からの要素インデックス
    start < 0
    (-1:末尾)
    末尾からの要素インデックス (要素数 - start)
  • end:設定終了要素インデックス (この位置は含まない)
    説明
    省略要素数
    範囲外補正
    0 ≦ end先頭からの要素インデックス
    end < 0
    (-1:末尾)
    末尾からの要素インデックス (要素数 - end)

  • 設定後の元の配列 (配列変更)

var array = [ 0, 1, 2, 3, 4, 5, 6, 7 ];
var arrayNew = array.fill(-1, 1, 3);
console.log(arrayNew);  // 出力:[0, -1, -1, 3, 4, 5, 6, 7]
console.log(array);     // 出力:[0, -1, -1, 3, 4, 5, 6, 7] 元の配列を変更

array = [ -8, -7, -6, -5, -4, -3, -2, -1 ];
array.fill(0, -3);
console.log(array);     // 出力:[-8, -7, -6, -5, -4, 0, 0, 0]
// 【~Array【型指定配列ビュー (%TypedArray%)】オブジェクト】
var array = [ 0, 1, 2, 3, 4, 5 ];
var typedArray = new Int32Array(array);
typedArray.fill(-1, 1, 4);
console.log(typedArray);  // 出力:[0, -1, -1, -1, 4, 5]
// 【逆方向】
array = [ 0, 1, 2, 3, 4, 5, 6, 7 ];
array.fill(-1, 3, 1);   // 処理なし
console.log(array);     // 出力:[0, 1, 2, 3, 4, 5, 6, 7]

Array.prototype.reverse【要素反転】メソッド

メモ

  • 配列要素を反転 (配列自体を反転)

構文

reverse ()

  • なし

  • 要素を反転した元の配列 (配列変更)

var array = [1, 2, 3];
array.reverse();
console.log(array); // 出力:[3, 2, 1]
array = [];
array.reverse();
console.log(array); // 出力:[]

Array.prototype.sort【ソート】メソッド

メモ

  • 配列要素のソート (配列自体をソート)

構文

sort ( [ comparefn ] )

  • comparefn:比較用コールバック関数 (省略:文字列変換して比較)
    引数名 (例)説明
    x要素x (実装依存)
    y要素y (実装依存)
    戻り値 (比較結果)説明
    x < y とみなす
    0x = y とみなす
    y < x とみなす

  • 要素をソートした元の配列 (配列変更)

  • TypeError 例外callbackfn が呼び出し可能な関数オブジェクト以外 (実装依存)

// 数値比較
function func(x, y) {
  var ret = x - y;
  console.log("x:" + x, "y:" + y, "戻り値:" + ret);
  return ret;
}

var array = [20, 30, 10, 20, 123];
array.sort(func);  // 実装によってはx・y逆転 (ソート結果は同じ)
// 出力:x:20 y:30 戻り値:-10
// 出力:x:30 y:10 戻り値:20
// 出力:x:20 y:10 戻り値:10
// 出力:x:30 y:20 戻り値:10
// 出力:x:20 y:20 戻り値:0
// 出力:x:30 y:123 戻り値:-93
console.log(array);
// 出力:[10, 20, 20, 30, 123]

array = [20, 30, 10, 20, 123];
array.sort();
console.log(array);
// 出力:[10, 123, 20, 20, 30]

array = [20, 30, 10, 20, 123];
array.sort(null);  // TypeError 例外 (実装依存)