Array.prototype.copyWithin()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2015å¹´9æ.
copyWithin() 㯠Array ã¤ã³ã¹ã¿ã³ã¹ã®ã¡ã½ããã§ããã®é
åã®ä¸é¨ãé
åå
ã®ä»ã®å ´æã«ã·ã£ãã¼ã³ãã¼ãããã®é
åãé·ãã夿´ããã«è¿ãã¾ãã
試ãã¦ã¿ã¾ããã
const array = ["a", "b", "c", "d", "e"];
// ã¤ã³ããã¯ã¹ 0 ã«ã¤ã³ããã¯ã¹ 3 ã®è¦ç´ ãã³ãã¼
console.log(array.copyWithin(0, 3, 4));
// äºæ³ãããçµæ: Array ["d", "b", "c", "d", "e"]
// ã¤ã³ããã¯ã¹ 1 以éã®ãã¹ã¦ã®è¦ç´ ã«ã¤ã³ããã¯ã¹ 3 ããæ«å°¾ã¾ã§ãã³ãã¼
console.log(array.copyWithin(1, 3));
// äºæ³ãããçµæ: Array ["d", "d", "e", "d", "e"]
æ§æ
copyWithin(target, start)
copyWithin(target, start, end)
弿°
target-
並ã³ã®ã³ãã¼å ã¨ãªã 0 ããå§ã¾ãã¤ã³ããã¯ã¹ã§ãæ´æ°ã«å¤æããã¾ããããã¯
startã«ããè¦ç´ ãã³ãã¼ãããå ´æã«å¯¾å¿ããstartããendã¾ã§ã®ãã¹ã¦ã®è¦ç´ ãå¾ç¶ã®ã¤ã³ããã¯ã¹ã«ã³ãã¼ããã¾ãã- è² ã®ã¤ã³ããã¯ã¹ã®å ´åã¯ãé
åã®æ«å°¾ããéã«æ°ãã¾ãã
-array.length <= target < 0ã®å ´åã¯ãtarget + array.lengthã使ç¨ããã¾ãã target < -array.lengthã®å ´åã¯ã0ã使ç¨ããã¾ããtarget >= array.lengthã®å ´åã¯ãä½ãã³ãã¼ããã¾ãããtargetãæ£è¦åå¾ã®startã®å¾ã«ä½ç½®ãã¦ããå ´åãã³ãã¼ã¯array.lengthã®æ«å°¾ã¾ã§ããè¡ããã¾ããï¼è¨ãæããã°ãcopyWithin()ã¯é åãæ¡å¼µãã¾ããï¼ã
- è² ã®ã¤ã³ããã¯ã¹ã®å ´åã¯ãé
åã®æ«å°¾ããéã«æ°ãã¾ãã
start-
è¦ç´ ã®ã³ãã¼å ã®å§ã¾ãã表ã 0 ããå§ã¾ãã¤ã³ããã¯ã¹ã§ãæ´æ°ã«å¤æããã¾ãã
- è² ã®ã¤ã³ããã¯ã¹ã®å ´åã¯ãé
åã®æ«å°¾ããéã«æ°ãã¾ãã
-array.length <= start < 0ã®å ´åã¯ãstart + array.lengthã使ç¨ããã¾ãã start < -array.lengthã®å ´åã¯ã0ã使ç¨ããã¾ããstart >= array.lengthã®å ´åã¯ãä½ãã³ãã¼ããã¾ããã
- è² ã®ã¤ã³ããã¯ã¹ã®å ´åã¯ãé
åã®æ«å°¾ããéã«æ°ãã¾ãã
endçç¥å¯-
è¦ç´ ã®ã³ãã¼å ã®æ«å°¾ã表ã 0 ããå§ã¾ãã¤ã³ããã¯ã¹ã§ãæ´æ°ã«å¤æããã¾ãã
copyWithin()ã®ã³ãã¼ã¯endã®æåã¾ã§è¡ãã¾ãã- è² ã®ã¤ã³ããã¯ã¹ã®å ´åã¯ãé
åã®æ«å°¾ããéã«æ°ãã¾ãã
-array.length <= end < 0ã®å ´åã¯ãend + array.lengthã使ç¨ããã¾ãã end < -array.lengthã®å ´åã¯ã0ã使ç¨ããã¾ããend >= array.lengthã®å ´åãendãçç¥ãããå ´åãundefinedã§ãã£ãå ´åã¯ãarray.lengthã使ç¨ãããæ«å°¾ã¾ã§ã®ãã¹ã¦ã®è¦ç´ ãã³ãã¼ããã¾ããendãstartã示ãä½ç½®ã®åã¾ãã¯ãã®ä½ç½®ã示ãå ´åãä½ãã³ãã¼ããã¾ããã
- è² ã®ã¤ã³ããã¯ã¹ã®å ´åã¯ãé
åã®æ«å°¾ããéã«æ°ãã¾ãã
è¿å¤
夿´ãããé åã§ãã
解説
copyWithin() ã¡ã½ãã㯠C ã C++ ã® memmove ã®ãããªåãããã Array ã®ãã¼ã¿ãç§»åããããã®é«ãããã©ã¼ãã³ã¹ã®ã¡ã½ããã§ããããã¯ç¹ã« TypedArray ã®ååã¡ã½ããã«å½ã¦ã¯ã¾ãã¾ãããã¼ã¿ã®ä¸¦ã³ãã³ãã¼ããè²¼ãä»ããããå¦çãä¸å½ä»¤ã§è¡ããã¾ããã³ãã¼å
ã¨è²¼ãä»ãå
ã§é åãéãªã£ã¦ããã¨ãã¦ããè²¼ãä»ãå
ã®ä¸¦ã³ã¯ã³ãã¼ãããå¤ã«ãªãã¾ãã
undefined ã¯æ´æ°ã«å¤æããã㨠0 ã«ãªãããã start 弿°ãçç¥ãã㨠0 ãæ¸¡ããã®ã¨åã广ããããé
åå
¨ä½ã対象ã¨ããä½ç½®ã«ã³ãã¼ããã¾ãï¼å³ã®å¢çãåãåãããå·¦ã®å¢çãè¤è£½ãããå³ã·ããã¨åãã§ãï¼ããã®åä½ã¯ã³ã¼ãã®èªã¿æãæ··ä¹±ãããå¯è½æ§ãããã®ã§ã代ããã« start ã¨ã㦠0 ãæç¤ºçã«æ¸¡ãã¦ãã ããã
console.log([1, 2, 3, 4, 5].copyWithin(2));
// [1, 2, 1, 2, 3]; ãã¹ã¦ã®è¦ç´ ãå³ã« 2 ã¤ããã
copyWithin() ã¯å¤æ´ãè¡ãã¡ã½ããã§ãã this ã®é·ãã¯å¤æ´ãã¾ãããã this ã®å
容ã夿´ããå¿
è¦ã«å¿ãã¦æ°ããããããã£ã使ãã¾ãã
copyWithin() ã¡ã½ããã¯ç©ºã®ã¹ããããä¿æãã¾ããã³ãã¼å
ã®ç¯å²ãçé
åã§ãã£ãå ´åã空ã®ã¹ãããã«å¯¾å¿ããã¤ã³ããã¯ã¹ã¯åé¤ããã空ã®ã¹ãããã«ãªãã¾ãã
copyWithin() ã¡ã½ããã¯æ±ç¨çã§ãããã®ã¡ã½ãã㯠this ã®å¤ã« length ããããã£ã¨æ´æ°ã®ãã¼ãæã£ãããããã£ããããã¨ã ããæ±ãã¾ããæååãé
å風ãªãã¸ã§ã¯ãã§ãããæååã¯ä¸å¤ãªã®ã§ããã®ã¡ã½ãããé©ç¨ããã®ã¯é©ãã¦ãã¾ããã
ä¾
>copyWithin() ã®ä½¿ç¨
console.log([1, 2, 3, 4, 5].copyWithin(0, 3));
// [4, 5, 3, 4, 5]
console.log([1, 2, 3, 4, 5].copyWithin(0, 3, 4));
// [4, 2, 3, 4, 5]
console.log([1, 2, 3, 4, 5].copyWithin(-2, -3, -1));
// [1, 2, 3, 3, 4]
çé åã«å¯¾ãã copyWithin() ã®ä½¿ç¨
copyWithin() ã¯ç©ºã®ã¹ããããåºãã¾ãã
console.log([1, , 3].copyWithin(2, 1, 2)); // [1, empty, empty]
é åã§ã¯ãªããªãã¸ã§ã¯ãã«å¯¾ãã copyWithin() ã®å¼ã³åºã
copyWithin() ã¡ã½ãã㯠this ã® length ããããã£ãèªã¿è¾¼ãã§ãé¢ä¿ããæ´æ°ã®ã¤ã³ããã¯ã¹ãæä½ãã¾ãã
const arrayLike = {
length: 5,
3: 1,
};
console.log(Array.prototype.copyWithin.call(arrayLike, 0, 3));
// { '0': 1, '3': 1, length: 5 }
console.log(Array.prototype.copyWithin.call(arrayLike, 3, 1));
// { '0': 1, length: 5 }
// ã³ãã¼å
ã空ã®ã¹ãããã§ããããã '3' ããããã£ã¯åé¤ããã
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-array.prototype.copywithin> |