Vanilla JavaScript每个功能都由用户控制

Vanilla JavaScript each function user controlled

本文关键字:用户 控制 功能 JavaScript Vanilla      更新时间:2023-09-26

所以我已经编写了一些像jQuery这样的每个函数,老实说,它们很好,但我开始思考,如果手头的用户不想从0开始,或者想操作迭代器,该怎么办。我已经尝试了很多方法,但它似乎要么崩溃,要么导致无限循环。下面是一些例子。

//a being an array of elements
_$(a).each(function(i){
   console.log(i);
   i++;
});
//backend js
each:function(fn){
  var i = fn[0]; // equals the first argument in the callback
  for(i=0;i<this.length;)
     fn.call(this[i],i);
  return this;
},

下一个示例

//a being an array of elements
var inta = 6;
_$(a).each(function(i){
  console.log(i); 
},inta++);
//backend js
each:function(fn,iterator){
   var len = this.length;
   var ct = iterator;
   while(ct < len)
    fn.call(this[ct],ct);
   return this;
},

还有一些例子,它们也不起作用。所以问题是如何像上面的第一个例子一样在函数内部操作迭代器。如果不可能,那也没关系,只是对这种奇怪的可能性感到好奇。

所以我上面从mapfilterreducesomeevery中读到的内容,它们无法满足我的需求,因为我正在编写一个小型的最小库。所以我需要确切地知道迭代什么,在我的例子中是this,但只有this[INT]。因此,我在函数后面创建了一个可选参数,通过.添加到迭代器中

each:function(fn,add){
        /*
           First check if add is assigned
           If it is not assign it to be 1 + 1 (i++)
           If it is, make sure it is not 0 (causing an infinite loop)
           And that will result in ( i + add)
        */
        add = 0 !== add && add || 1;
        for(var i=0;i<this.length;i = i + add)
            fn.call(this[i],i);
        return this;
    }

所以用例应该是。

var domElements = document.querySelectorAll('*'); //10 items per se
_$(domElements).each(function(i){
   console.log(i);
},2);
//logs 
//0 2 4 6 8

目前,这只是一个非常基本的迭代器,就像我所说的那样,对于一个没有太多"牛市"的小型方便库。