我正在尝试一项明显的任务:
var maxVal = [ 1, 2, 3, 4, 5 ].reduce( Math.max, 0 );
Run Code Online (Sandbox Code Playgroud)
得到:
NaN
Run Code Online (Sandbox Code Playgroud)
作为结果.为了使它工作,我必须以这种方式创建一个匿名函数:
var maxVal = [ 1, 2, 3, 4, 5 ].reduce( function ( a, b ) {
return Math.max(a, b);
}, 0 );
Run Code Online (Sandbox Code Playgroud)
有人能告诉我为什么吗?两者都是带有两个参数并且都返回一个值的函数.有什么不同?
另一个例子可能是:
var newList = [[1, 2, 3], [4, 5, 6]].reduce( Array.concat, [] );
Run Code Online (Sandbox Code Playgroud)
结果是:
[1, 2, 3, 0, #1=[1, 2, 3], #2=[4, 5, 6], 4, 5, 6, 1, #1#, #2#]
Run Code Online (Sandbox Code Playgroud)
我只能在这个形状下在node.js中运行这个例子(Array在node.js v4.12中没有连接,我现在使用它):
var newList = [[1, 2, 3], …Run Code Online (Sandbox Code Playgroud) 我是Clojure的新手,我的第一个项目必须处理巨大的(250 + GB)XML文件.我想把它放到PostgreSQL中以便稍后处理它,但是不知道如何处理这么大的文件.
我之前发布了一个巨大的XML文件 - 它是一个287GB的XML,带有维基百科转储我想要放入CSV文件(修订作者和时间戳).我设法做到这一点,直到某一点.之前,我得到了StackOverflow的错误,但现在解决第一个问题后,我得到:java.lang.OutOfMemoryError:Java堆空间错误.
我的代码(部分取自Justin Kramer的答案)看起来像这样:
(defn process-pages
[page]
(let [title (article-title page)
revisions (filter #(= :revision (:tag %)) (:content page))]
(for [revision revisions]
(let [user (revision-user revision)
time (revision-timestamp revision)]
(spit "files/data.csv"
(str "\"" time "\";\"" user "\";\"" title "\"\n" )
:append true)))))
(defn open-file
[file-name]
(let [rdr (BufferedReader. (FileReader. file-name))]
(->> (:content (data.xml/parse rdr :coalescing false))
(filter #(= :page (:tag %)))
(map process-pages))))
Run Code Online (Sandbox Code Playgroud)
我没有表现article-title,revision-user和revision-title功能,因为他们只是简单地从网页或修改散列特定场所需要的数据.任何人都可以帮助我 - 我在Clojure中真的很新,并没有遇到问题.
我是JavaScript的新手,并不了解它的一些行为.我想编写一个在Eloquent JavaScript书中找到的递归版本的reduce函数.那是我的代码:
function rec_reduce( fn, base, list ) {
if( list.length === 0 ) {
return base;
}
else {
rec_reduce( fn, fn( base, list[ 0 ] ), list.slice( 1 ) );
}
}
print( rec_reduce( Math.min, 100, [ 5, 3, 7, 2, 6, 5 ] ));
Run Code Online (Sandbox Code Playgroud)
结果是:
undefined
Run Code Online (Sandbox Code Playgroud)
为了看看我发生了什么:
print( base );
Run Code Online (Sandbox Code Playgroud)
作为函数的第一行,结果是:
100
5
3
3
2
2
2
undefined
Run Code Online (Sandbox Code Playgroud)
谁能解释我为什么?