Javascript MDN'背后的逻辑;s reduce()pollyfill';s while循环
Javascript MDN'背后的逻辑;s reduce()pollyfill';s while循环,javascript,arrays,Javascript,Arrays,Array.prototype.reduce()polyfill: 第1部分查找有效的现有初始值(如果尚未提供)。在稀疏数组中,不能只假设设置了array[0] 如果我们声明: var sparse = []; sparse[1] = "something"; sparse[4] = "else"; 那么sparse[0]不是一个实际值,也不会是sparse中的 您需要找到实际设置的第一个值。数组中的第一个索引 因此,从k==0开始: while (k < len &&
Array.prototype.reduce()
polyfill:
第1部分查找有效的现有初始值(如果尚未提供)。在稀疏数组中,不能只假设设置了array[0]
如果我们声明:
var sparse = [];
sparse[1] = "something";
sparse[4] = "else";
那么sparse[0]
不是一个实际值,也不会是sparse中的
您需要找到实际设置的第一个值。数组中的第一个索引
因此,从k==0开始:
while (k < len && !(k in t)) {
k++;
}
我们有了初始值,然后继续前进
第2部分循环遍历数组的其余实际元素,为每个元素调用回调,并跳过“缺少”索引:
(;k{
如果(k在t中){
值=回调(值,t[k],k,t);
}
}
在我们的示例中,2
和3
被跳过,接下来我们调用sparse[4]
的回调
如果数组不是稀疏的(例如,var arr=[1,2,3,4];
),这一切都可以正常工作,它不会跳过任何内容。看起来它会计算数组中的插槽数,这对于非稀疏数组来说有点愚蠢……它会跳过稀疏数组中缺少的元素。类似于:好的thx的明确答案-将有时间我有点工作,让我的头周围-回来thx伟大的2快速跟进:1<代码>值=t[k++]代码>为什么使用k++?难道我们不需要从while循环开始的k值,只需要value=t[k]
?2.我想这对关联数组不起作用吧?Thnx agian.没关系-我知道了-k++将从数组中的下一个值开始,用已建立的初始值减少-这就是为什么for循环不初始化k值的原因。去吧,谢谢。
var sparse = [];
sparse[1] = "something";
sparse[4] = "else";
while (k < len && !(k in t)) {
k++;
}
value = t[k++];
for (; k < len; k++) {
if (k in t) {
value = callback(value, t[k], k, t);
}
}