JavaScript中array.copyWithin的实现是什么

JavaScript中array.copyWithin的实现是什么,javascript,algorithm,Javascript,Algorithm,我正在尝试将一些JS复制到另一种编程语言,但没有使用以下函数在现有程序上使用此函数(查找并替换): function copyWithin(array, index, from, to) { while (from < to) { array[index] = array[from] from++ index++ } } 与 我做错了什么?我需要用我自己的版本替换这个函数 函数copyin(数组、索引、从、到){ while(从

我正在尝试将一些JS复制到另一种编程语言,但没有使用以下函数在现有程序上使用此函数(查找并替换):

function copyWithin(array, index, from, to) {
  while (from < to) {
    array[index] = array[from]
    from++
    index++
  }
}

我做错了什么?我需要用我自己的版本替换这个函数

函数copyin(数组、索引、从、到){
while(从<到){
数组[索引]=数组[从]
从++
索引++
}
返回数组
}
var数组=[{a:1},{b:2},{c:3},{d:4},{e:5}]
log(array.concat().copyWithin(1,3,5))
log(copyin(array.concat(),1,3,5))
函数copyin(数组、索引、从、到){
让我们开始
设startIndex=索引
让newarray=[]
while(开始}
如果参数在范围内,则函数在
index=start时正常工作;我——){
数组[i+shift]=数组[i];
}
}
返回数组;//数组发生了变异,但也可以方便地返回它。
}
设a=[“a”、“b”、“c”、“d”、“e”];
log(copyWithin([…a],1,3,5));

log(copyWithin([…a],3,1,3))它完全按照用户所说的做。如果您觉得有帮助,还可以参考其他语言结构。最后,一个polly填充,显示在浏览器不支持的情况下如何编码实现[from,to],然后根据两个子范围重叠的方式,您需要不同的逻辑。哦,哇,我错过了polyfill。它真的那么复杂吗?使用这些索引运行代码示例会从两个函数中产生相同的结果。@LancePollard复杂的原因在于它可以接受一个、两个或三个参数。您的乐趣是什么Action只能接受三个使事情更简单的参数。请注意,代码中有一个隐藏的假设,即数组与javascript数组类似,这意味着当您写入超出范围的索引时,数组可以增长。因此,假设您有一个大小为1的数组,则写入数组[2]将其扩展到大小3。如果您的语言行为与javascript不同,则需要执行一些
realloc()
操作,或者需要将
数组初始化为您尚未执行的正确大小。我认为这是不正确的。根据文档,“如果
target
位于
start
之后,复制的序列将被修剪以适应
arr.length
”。但是您似乎没有修剪。我不知道这是否是一个完美的实现,但它允许我的代码再次编译哈哈。例如:
a=[1,2];copyinwithin(a,1,0,2)
。调用后:
a=[1,1,2]
。这是故意的,还是在您的场景中永远不会发生这种情况?有趣的是,我还没有深入检查,我正在停止您不久前使用的b+树算法的使用,在那里使用了
copyin
。它似乎可以工作,但看起来您发现了一个尚未出现的bug。您发现了什么o与我最初所做的不同?你只是处理了反向案例吗?仅此而已?(来自原始问题中的示例)。可能这就是问题的症结所在,而不是处理反向案例。我也不确定为什么我创建了一个新的案例。是的,事实上,我只是检测并处理了反向案例。(并添加了一个检查,以避免阵列因副本而增长)。
array.copyWithin(index, from, to)
copyWithin(array, index, from, to)