在特定位置从数组中删除值

72

我知道这个话题已经有很多讨论,但我认为这个问题与众不同:

目标是从数组的随机位置获取一个值,然后删除该值。

我使用了约翰·雷西格(jQuery的创建者)的这一部分代码来移除一个元素,但它似乎没有按照我指定的位置进行操作。

Array.prototype.remove = function(from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
};

这是我如何使用它

var elements = ['#1','#2','#3','#4']
var R1 = Math.floor(Math.random() * elements.length),
E1 = elements.slice(R1,1)
elements.remove(R1)
var R2 = Math.floor(Math.random() * elements.length),
E2 = elements.slice(R2,1)
elements.remove(R2)
var R3 = Math.floor(Math.random() * elements.length),
E3 = elements.slice(R3,1)
elements.remove(R3)
var R4 = Math.floor(Math.random() * elements.length),
E4 = elements.slice(R4,1)

问题在于删除函数,我认为它在删除特定位置上的对象时无法正常工作。


1
你没有写这个,是吗?这正是 jQuery 的创始人 John Resig 写的实现。 - barndog
抱歉没有提到,我是新来的。这里是第一部分,以下是翻译内容:它是... - GdeBrock
你的代码应该做什么? - georg
它应该为4个函数中的每一个提供一个随机ID,但不会有重复的ID,因此基本上我正在尝试获取1到4的不同组合。 - GdeBrock
1个回答

23
你错误地使用了 elements.slice(R3,1)。第二个参数的意思不是你想要获取的数组长度,而是应该停止 slice 方法的零索引元素。所以你的代码的意思是“给我从索引 R3 到索引 1 的元素”,它只有在一种情况下才能工作:elements.slice(0, 1)。如果你只需要获取一个元素,请使用 elements[R1]。如果你需要获取一个带有一个元素的数组,可以继续使用 elements.slice(R1, R1 + 1);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接