Firefox 32(Nightly) で Array.prototype.copyWithin が実装された
ECMAScript 6th 仕様の Array.prototype.copyWithin 実装。
Array.prototype.copyWithin (target, start [, end])
引数は
- target(Number): コピー先の開始Index値
- start(Number): コピー元の開始Index値
- end(Number)(Optional): コピー元の終了Index値。省略時は、その配列のlength
となっている。
startからend間の要素をそれぞれtargetから連なる要素へ可能な限り*1代入するメソッドである。新たな配列に対してではなく、対象オブジェクトに対して実施するので破壊的である。また、Array特有ではなく、Array-likeなオブジェクトに対して使用できるように設計されているみたい。
例
var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; arr.copyWithin(0, 8); // 8,9番目の値を、0, 1 番目へ代入 // => [8, 9, 2, 3, 4, 5, 6, 7, 8, 9]; arr.copyWithin(0, -2); // マイナス値も受け付ける // => [8, 9, 2, 3, 4, 5, 6, 7, 8, 9]; arr.copyWithin(0, 3, 5); // 3,4番目の値を 0,1番目へ代入 // => [3, 4, 2, 3, 4, 5, 6, 7, 8, 9]; arr.copyWithin(0, 5, 3); // start > end の場合、何もしない
最後、start > end の場合、何もしない
と書いた。あくまで現行Draft rev25仕様の話なので今後どうなるか分からないけど、ちょっと不親切な感じがする。
*1:配列のlengthを超えて代入はしない