JavaScript Prototype.js替换

时间:2014-09-05 15:50:38

标签: javascript prototypejs

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

我正在尝试替换

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缺乏了解仍然存在问题。如果有人可以帮助我,我非常感激。

1 个答案:

答案 0 :(得分:1)

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

inject相当的原生代码是.reduce() method。使用

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