gpt4 book ai didi

javascript - Apply.prototype.push.apply 与 forEach 对于嵌套数组?

转载 作者:行者123 更新时间:2023-11-28 07:09:42 30 4
gpt4 key购买 nike

所以我正在做 learnRx http://reactive-extensions.github.io/learnrx/我有一个关于制作 mergeAll() 函数的问题(问题 10)。

这是我的答案,它通过了,但不是“规范的”。

Array.prototype.mergeAll = function() {
var results = [];
this.forEach(function(subArray) {
subArray.forEach(function(item){
results.push(item);
});
});
return results;
};

他们首选的答案:

Array.prototype.mergeAll = function() {
var results = [];
this.forEach(function(subArray) {
results.push.apply(results, subArray);
});
return results;

};

好吧,如果我们采用 [[1,2], [3,4]] 作为起始数组,则 forEach 会触发两次,第一次传递 [1,2],第二次传递 [3,4] 。然后 apply 的工作方式几乎与 forEach 类似,将参数 0 和 1(即 1 和 2)插入结果中。现在结果是 [1,2],然后 forEach 再次触发,参数 0 和 1 分别是 3 和 4,并且它们被推送。我花了一段时间才理解它为什么起作用,但这似乎令人困惑,因为它只是在执行 forEach,对吗?

是否有特定原因需要我不理解,还是纯粹是风格上的?

另外,我还有一个小问题:当 Array.prototype.push.apply 更明确并且不需要爬原型(prototype)链时,为什么还要写 results.push.apply ?

最佳答案

It took me awhile to understand why it works

...但你最终还是做到了。它们基本上是等价的1

Is there a specific reason it's necessary I'm not understanding or is it purely stylistic?

没有具体原因。从风格上来说,他们的显然更短(更简洁)。从性能 Angular 来看,由于调用了许多回调函数,forEach 循环的速度不是很快。 apply 确实有点令人困惑,而且效率也不是很高。

但是,如果他们寻找简洁的代码,我想知道为什么他们不直接使用

Array.prototype.mergeAll = function() {
return Array.prototype.concat.apply([], this);
};

1:非数组的细微差别,您的解决方案依赖于 .forEach 方法,而 apply 依赖于 .length.

关于javascript - Apply.prototype.push.apply 与 forEach 对于嵌套数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31415235/

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