Vanilla JavaScript 每个功能用户控制

Vanilla JavaScript each function user controlled

所以我写了一些像 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

目前这只是一个非常基本的迭代器,正如我所说的一个小型方便的库,不会被很多 "bull" 所困扰。