Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ruby中的Array.prototype.splice_Javascript_Ruby - Fatal编程技术网

Javascript Ruby中的Array.prototype.splice

Javascript Ruby中的Array.prototype.splice,javascript,ruby,Javascript,Ruby,一位朋友问我Ruby中实现JavaScript的splice方法效果的最佳性能方法。 这意味着阵列本身或副本上没有迭代 “从索引开始,删除长度项并(可选)插入元素。最后在数组中返回删除的项。”使用 至于返回删除的元素,[]=不会这样做。。。您可以编写自己的帮助器方法来执行此操作: class Array def splice(start, len, *replace) ret = self[start, len] self[start, len] = replace

一位朋友问我Ruby中实现JavaScript的
splice
方法效果的最佳性能方法。 这意味着阵列本身或副本上没有迭代

“从索引开始,删除长度项并(可选)插入元素。最后在数组中返回删除的项。”使用

至于返回删除的元素,
[]=
不会这样做。。。您可以编写自己的帮助器方法来执行此操作:

class Array
  def splice(start, len, *replace)
    ret = self[start, len]
    self[start, len] = replace
    ret
  end
end
首先使用提取要删除的零件:

a   = [1, 2, 3, 4]
ret = a.slice!(2,2)
这将
[1,2]
保留在
a
中,而
[3,4]
保留在
ret
中。然后,使用简单的方法插入新值:

a[2,0] = [:pancakes]
结果是
ret
中的
[3,4]
,以及
a
中的
[1,2,:煎饼]
。概括:

def splice(a, start, len, replacements = nil)
    r = a.slice!(start, len)
    a[start, 0] = replacements if(replacements)
    r
end
如果您想要变量行为,也可以使用
*替换

def splice(a, start, len, *replacements)
    r = a.slice!(start, len)
    a[start, 0] = replacements if(replacements)
    r
end

你还是没有!将
replace
更改为
*replace
。然后你得到你的投票。考虑到你写的拼接方法,我得到的结果是[:h,:g],这是不正确的,它应该是[:a,:c,:test,:t,:m]。提示:数组#-比较值,这在这里不好。@kain:为什么它应该是[:a,:c,:test,:t,:m]?我以为您希望它只返回已删除的值?我没有使用
Array#-
…我的朋友说Array.prototype.splice将光标定位在开始索引上,从该索引中删除n个元素,可以选择用某个实例(比如一个符号)替换间隙,然后返回数组的其余部分。请参阅原始问题中的示例。也许他对JS方法的看法是错误的?@kain,jtbandes的回答是,一旦
replace
参数变为varargs:)就忠实于JavaScript的
splice
。它应该返回已删除的元素。
a[2,0] = [:pancakes]
def splice(a, start, len, replacements = nil)
    r = a.slice!(start, len)
    a[start, 0] = replacements if(replacements)
    r
end
def splice(a, start, len, *replacements)
    r = a.slice!(start, len)
    a[start, 0] = replacements if(replacements)
    r
end