Array.prototype.copyWithin() - JavaScript Array 对象
Array.prototype.copyWithin()
copyWithin()
方法浅复制数组的一部分到同一数组中的另一个位置,并返回它,不会改变原数组的长度。
语法
arr.copyWithin(target[, start[, end]])
参数
target
0 为基底的索引,复制序列到该位置。如果是负数,target
将从末尾开始计算。如果target
大于等于arr.length
,将会不发生拷贝。如果target
在start
之后,复制的序列将被修改以符合arr.length
。start
0 为基底的索引,开始复制元素的起始位置。如果是负数,start
将从末尾开始计算。如果start
被忽略,copyWithin
将会从0开始复制。end
0 为基底的索引,开始复制元素的结束位置。copyWithin
将会拷贝到该位置,但不包括end
这个位置的元素。如果是负数,end
将从末尾开始计算。如果end
被忽略,copyWithin
方法将会一直复制至数组结尾(默认为arr.length
)。返回值
改变后的数组。
描述
参数 target、start 和 end 必须为整数。
如果 start 为负,则其指定的索引位置等同于 length+start,length 为数组的长度。end 也是如此。
copyWithin 方法不要求其 this 值必须是一个数组对象;除此之外,copyWithin 是一个可变方法,它可以改变 this 对象本身,并且返回它,而不仅仅是它的拷贝。
copyWithin
就像 C 和 C++的memcpy
函数一样,且它是用来移动TypedArray
数据的一个高性能的方法。复制以及粘贴序列这两者是为一体的操作;即使复制和粘贴区域重叠,粘贴的序列也会有拷贝来的值。
copyWithin
函数被设计为通用式的,其不要求其this
值必须是一个数组
对象。
copyWithin
是一个可变方法,它不会改变 this 的长度 length,但是会改变 this 本身的内容,且需要时会创建新的属性。
例子
let numbers = [1, 2, 3, 4, 5]; numbers.copyWithin(-2); // [1, 2, 3, 1, 2] numbers.copyWithin(0, 3); // [4, 5, 3, 4, 5] numbers.copyWithin(0, 3, 4); // [4, 2, 3, 4, 5] numbers.copyWithin(-2, -3, -1); // [1, 2, 3, 3, 4] [].copyWithin.call({length: 5, 3: 1}, 0, 3); // {0: 1, 3: 1, length: 5} // ES2015 Typed Arrays are subclasses of Array var i32a = new Int32Array([1, 2, 3, 4, 5]); i32a.copyWithin(0, 2); // Int32Array [3, 4, 5, 4, 5] // On platforms that are not yet ES2015 compliant: [].copyWithin.call(new Int32Array([1, 2, 3, 4, 5]), 0, 3, 4); // Int32Array [4, 2, 3, 4, 5]
Polyfill
if (!Array.prototype.copyWithin) { Array.prototype.copyWithin = function(target, start/*, end*/) { // Steps 1-2. if (this == null) { throw new TypeError('this is null or not defined'); } var O = Object(this); // Steps 3-5. var len = O.length >>> 0; // Steps 6-8. var relativeTarget = target >> 0; var to = relativeTarget > 0; var from = relativeStart > 0; var final = relativeEnd 0) { if (from in O) { O[to] = O[from]; } else { delete O[to]; } from += direction; to += direction; count--; } // Step 19. return O; }; }
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)