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;
},
还有几个例子,它们也不起作用。所以问题是我如何像上面的第一个例子一样在函数内部操作迭代器。如果不可能,那很好,只是对这种奇怪的可能性感到好奇。
所以我在上面从 map
、filter
、reduce
、some
、every
中读到的内容,它们无法与因为我正在编写一个小型的最小库,所以我需要什么。所以我需要确切地知道要迭代什么,在我的例子中是 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" 所困扰。
所以我写了一些像 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;
},
还有几个例子,它们也不起作用。所以问题是我如何像上面的第一个例子一样在函数内部操作迭代器。如果不可能,那很好,只是对这种奇怪的可能性感到好奇。
所以我在上面从 map
、filter
、reduce
、some
、every
中读到的内容,它们无法与因为我正在编写一个小型的最小库,所以我需要什么。所以我需要确切地知道要迭代什么,在我的例子中是 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" 所困扰。