我想编写一个函数,该函数在数组长于长度2的情况下删除第二个元素。例如:
removeEveryOther([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) returns [1, 3, 5, 7, 9]);
removeEveryOther([[1, 2]]) returns [[1, 2]])
这是我的尝试:
function removeEveryOther(arr){
for (i=0; i < arr.length; i++) {
if (arr.length>2) {
arr.splice((2*i), 1);
}
}
return arr
}
调用该函数时:
removeEveryOther(['1', '2', '3', '4', '5', '6', '7']) returns [ '2', '3', '5', '6' ]
尽管不确定我在做什么错,但感谢您的阅读甚至帮助我。祝你有美好的一天!
答案 0 :(得分:4)
您可以使用filter。并将支票移到顶部:
function removeEveryOther(arr){
if (arr.length <= 2) {
return arr
}
return arr.filter((a,i) => i%2 == 0);
}
答案 1 :(得分:0)
您不应变异原始数组,而应创建一个新数组。
function removeEveryOther(arr){
if (arr.length > 2) {
return arr.filter((item, index) => index % 2 === 0);
} else {
return arr;
}
}
答案 2 :(得分:0)
您可以执行以下操作:
let removeEvery2 = (arr) => {
if(arr.length > 2) {
return arr.filter((el, i) => i % 2 === 0)
}
return arr
}
答案 3 :(得分:0)
您可以从头开始循环,因为从头开始进行拼接后,以下所有索引都消失了。
function removeEveryOther(array) {
if (array.length < 3) return array;
let i = Math.floor(array.length / 2) * 2 + 1;
while (i > 0) {
array.splice(i, 1);
i -= 2;
}
return array;
}
console.log(removeEveryOther([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])); // [1, 3, 5, 7, 9]
console.log(removeEveryOther([1, 2]));
答案 4 :(得分:-1)
尝试使用此功能,我对您的理解非常简单,并且非常接近您在问题中所写的内容
class ParentManage(LoginRequiredMixin, UpdateView):
login_url = reverse_lazy('login')
model = Parent
form_class = ParentManageForm
slug_url_kwarg = 'parent_slug'
template_name_suffix = '-manage'
def get_object(self):
return Parent.objects.get(slug=self.kwargs['parent_slug'])
def get_context_data(self, **kwargs):
data = super().get_context_data(**kwargs)
if self.request.POST:
data["children"] = ChildFormset(self.request.POST, instance=self.object)
else:
data["children"] = ChildFormset(instance=self.object)
return data
def form_valid(self, form):
context = self.get_context_data()
children = context["children"]
self.object = form.save()
if children.is_valid():
children.instance = self.object
children.save()
return super().form_valid(form)
def get_success_url(self):
parent = self.get_object()
return reverse("parent-detail", kwargs={'parent_slug': parent.slug})
答案 5 :(得分:-1)
使用简单的for
循环。从索引1
而不是0
开始,然后将i
加2而不是1。
function removeEveryOther(arr){
if(arr.length <= 2) return arr;
for(let i = 1; i < arr.length; i +=2){
arr.splice(i, 1);
}
return arr;
}
console.log(removeEveryOther([1, 2, 3, 4, 5, 6, 7, 8]));
console.log(removeEveryOther([1, 2]))