嘿,伙计们,我正在将一些应用程序从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);
。