gpt4 book ai didi

javascript - ReduceRight 与 Reduce

转载 作者:行者123 更新时间:2023-11-30 20:38:17 24 4
gpt4 key购买 nike

我正在尝试实现 reduceRight。

我想知道我是否可以使用我的 reduce inside reduce right。我完成了其中的大部分,但我在某些测试用例中遇到了错误。

我的代码:

MyReduce:

Array.prototype.myReduce = function(cb, initialVal) {
if(!cb)
throw new Error("No CB defined");

var accumulator = (initialVal === undefined) ? undefined : initialVal;

for(var i= 0; i<this.length; i++){
if(accumulator !== undefined) {
accumulator = cb.call(undefined, accumulator, this[i], i, this)
} else {
accumulator = this[i];
}
}

return accumulator;
}

我的 Reduce 权限(使用 myReduce)

Array.prototype.myReduceRight2 = function(cb, initialVal) {
if(!cb)
throw new Error("No CB defined");

this.reverse();

const res = this.myReduce((acc,val) => {
return acc.concat(val);
});

return res;
}

当我运行该方法时:

const reduceRight2 = test2.myReduceRight2((acc, val) => {
return acc.concat(val);
}, []);

对于测试用例:

const test1 = [1, 20, 30, 80, 2, 9, 3];
const test2 = [[1,2], [3,4], [5,6]];

测试 2 通过但测试 1 失败 :(

谁能告诉我哪里出错了?

最佳答案

myReduceRight2 中,您没有将 initialVal 传递给 myReduce 方法。

此外,reduce 和 reduceRight 不会更改原始数组,因此您应该始终在应用更改之前克隆原始数组(例如反向)。

Array.prototype.myReduce = function(cb, initialVal) {
if (!cb)
throw new Error("No CB defined");

let [accumulator, ...arr] = initialVal === undefined ? [...this] : [initialVal, ...this];

for (var i = 0; i < arr.length; i++) {
accumulator = cb.call(undefined, accumulator, arr[i], i, arr);
}

return accumulator;
}

Array.prototype.myReduceRight2 = function(cb, initialVal) {
if (!cb)
throw new Error("No CB defined");

const arr = [...this].reverse(); // don't reverse the original array

const res = arr.myReduce(cb, initialVal); // pass initialVal

return res;
}

const test1 = [1, 20, 30, 80, 2, 9, 3];
const test2 = [[1,2], [3,4], [5,6]];

const test1R = test1.myReduceRight2((acc, val) => {
return acc.concat(val);
}, []);

const test2R = test2.myReduceRight2((acc, val) => {
return acc.concat(val);
}, []);

console.log(test1R);
console.log(test2R);

关于javascript - ReduceRight 与 Reduce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49581657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com