嘿伙计们我正在努力将一些应用程序从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缺乏了解仍然存在问题。如果有人可以帮助我,我非常感激。
答案 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);
。