Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MDN'背后的逻辑;s reduce()pollyfill';s while循环_Javascript_Arrays - Fatal编程技术网

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);
  }
}