JavaScript原型.js替换



嘿,伙计们,我正在将一些应用程序从JSP转换为JSF2,我已经到了显示谷歌地图的地步。旧的应用程序使用原型来获取正确的数据。我们不再支持原型。

我正在尝试更换

out.append("var index = 0; var count = markers.inject(0, function(acc, marker) { var count = marker.clusterCount ? marker.clusterCount : 1; return acc + count; });");

带有

out.append("var index = 0; var count = markers.push(" +
                        "function(acc, marker) { " +
                            "var count = 0;" +
                            "count = marker.clusterCount ? marker.clusterCount : 1;" +
                            "return acc + count; " +
                        "}" +
                    ");");

这是来自一个构建javascript的类。我知道我需要一个循环,在这里什么都不起作用。将循环放入函数中不会更改任何值,将函数封装在循环中会破坏映射。通过这个,我得到了部分结果,但我错过了很多。

我在这里找到了原型及其源代码:http://prototypejs.org/doc/latest/language/Enumerable/prototype/inject/

尽管这很有帮助,但事实证明,我对javascript缺乏理解是有问题的。如果有人能帮忙,我非常感谢。

好吧,您用对.push()的调用替换了Prototype的.inject。从他们的文档中,你可以看到他们正在做完全不同的事情!

inject的原生等价物是.reduce()方法。使用

out.append("var index = 0; var count = markers.reduce(function(acc, marker) { var count = marker.clusterCount ? marker.clusterCount : 1; return acc + count; }, 0);");

请注意,您也可以将var count = marker.clusterCount ? marker.clusterCount : 1; return acc + count;缩短为return acc + (marker.clusterCount || 1);

最新更新