由于
promise
具有
resolve
和
reject
回调参数,因此我创建了带有
break
回调参数的
reduce
工作函数。它接受与本机
reduce
方法相同的所有参数,除了第一个参数是要处理的数组(避免猴子补丁)。第三个 [2]
initialValue
参数是可选的。请参见下面的片段以查看
function
reducer。
var list = ["w","o","r","l","d"," ","p","i","e","r","o","g","i"];
var result = reducer(list,(total,current,index,arr,stop)=>{
if(current === " ") stop();
return total + current;
},'hello ');
console.log(result);
function reducer(arr, callback, initial) {
var hasInitial = arguments.length >= 3;
var total = hasInitial ? initial : arr[0];
var breakNow = false;
for (var i = hasInitial ? 0 : 1; i < arr.length; i++) {
var currentValue = arr[i];
var currentIndex = i;
var newTotal = callback(total, currentValue, currentIndex, arr, () => breakNow = true);
if (breakNow) break;
total = newTotal;
}
return total;
}
这里是已修改为数组 method
的 reducer
脚本:
Array.prototype.reducer = function(callback,initial){
var hasInitial = arguments.length >= 2;
var total = hasInitial ? initial : this[0];
var breakNow = false;
for (var i = hasInitial ? 0 : 1; i < this.length; i++) {
var currentValue = this[i];
var currentIndex = i;
var newTotal = callback(total, currentValue, currentIndex, this, () => breakNow = true);
if (breakNow) break;
total = newTotal;
}
return total;
};
var list = ["w","o","r","l","d"," ","p","i","e","r","o","g","i"];
var result = list.reducer((total,current,index,arr,stop)=>{
if(current === " ") stop();
return total + current;
},'hello ');
console.log(result);
current
是什么?我看不出它们如何执行相同的操作。无论如何,还有一些可能会提前跳出循环的方法,如some
、every
和find
。 - elclanrssome
和every
返回布尔值,而find
返回单个记录,我想要的是运行操作以生成备忘录。current
是当前值。参考 - Julio Marinscurrent
是什么? - elclanrsreduce
中提前退出,你需要使用内置函数来提前退出或者创建自己的帮助函数,或者使用lodash或其他库。请问您能否提供一个完整的示例说明您想要做什么? - elclanrs