删除第二个元素的函数

时间:2020-06-09 08:11:56

标签: javascript

我想编写一个函数,该函数在数组长于长度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' ]

尽管不确定我在做什么错,但感谢您的阅读甚至帮助我。祝你有美好的一天!

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]))