小编trz*_*zek的帖子

JavaScript reduce无法处理数学函数?

我正在尝试一项明显的任务:

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)

javascript reduce node.js higher-order-functions

13
推荐指数
1
解决办法
4394
查看次数

Clojure中的巨大XML

我是Clojure的新手,我的第一个项目必须处理巨大的(250 + GB)XML文件.我想把它放到PostgreSQL中以便稍后处理它,但是不知道如何处理这么大的文件.

xml clojure

12
推荐指数
1
解决办法
2674
查看次数

Clojure中的巨大文件和Java堆空间错误

我之前发布了一个巨大的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-userrevision-title功能,因为他们只是简单地从网页或修改散列特定场所需要的数据.任何人都可以帮助我 - 我在Clojure中真的很新,并没有遇到问题.

heap inputstream clojure

6
推荐指数
1
解决办法
1172
查看次数

JavaScript中的递归减少


我是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)

谁能解释我为什么?

javascript recursion reduce

2
推荐指数
1
解决办法
6085
查看次数