小编vie*_*bel的帖子

在Javascript中,如何有条件地将成员添加到对象?

我想创建一个有条件添加成员的对象.简单的方法是:

var a = {};
if (someCondition)
    a.b = 5;
Run Code Online (Sandbox Code Playgroud)

现在,我想写一个更惯用的代码.我在尝试:

a = {
    b: (someCondition? 5 : undefined)
};
Run Code Online (Sandbox Code Playgroud)

但现在,ba其价值的成员undefined.这不是理想的结果.

有方便的解决方案吗?

更新

我寻求一个可以处理几个成员的一般情况的解决方案.

a = {
  b: (conditionB? 5 : undefined),
  c: (conditionC? 5 : undefined),
  d: (conditionD? 5 : undefined),
  e: (conditionE? 5 : undefined),
  f: (conditionF? 5 : undefined),
  g: (conditionG? 5 : undefined),
 };
Run Code Online (Sandbox Code Playgroud)

javascript

294
推荐指数
18
解决办法
12万
查看次数

JavaScript中多个数组的笛卡尔积

您将如何在JavaScript中实现多个数组的笛卡尔积?

举个例子,

cartesian([1, 2], [10, 20], [100, 200, 300]) 
Run Code Online (Sandbox Code Playgroud)

javascript algorithm functional-programming

92
推荐指数
14
解决办法
3万
查看次数

在Jenkins中,如何将项目签出到特定目录(使用GIT)

抱歉'svn'风格 - 我们正处于从SVN迁移到GIT(包括我们的CI Jenkins环境)的过程中.

我们需要的是能够让Jenkins结帐(或者我应该说克隆?)GIT项目(存储库?)到一个特定的目录中.我们已经尝试了一些refspecs魔术,但是理解和使用成功并不是很明显.

此外,如果在同一个Jenkins项目中我们需要在项目根目录下将几个私有GitHub存储库签出到几个单独的目录中,我们怎么能这样做呢?

我们安装了GitHub插件.希望我们把事情说得对.

git hudson github jenkins jenkins-plugins

60
推荐指数
5
解决办法
14万
查看次数

什么时候应该将clojure关键字放在命名空间中?

在clojure中,关键字评估自己,例如:

>>:test
:test
Run Code Online (Sandbox Code Playgroud)

它们不接受任何参数,并且它们不受任何限制.那么,为什么我们需要在命名空间中限定关键字?

我知道isa使用derive需要命名空间限定的关键字(例如::test)创建层次结构.是否还有其他需要将关键字放在命名空间中的情况?

namespaces clojure keyword

31
推荐指数
2
解决办法
4914
查看次数

在clojure中,如何将宏应用于列表?

clojure,apply不能应用于宏.例如,(apply and [true false])引发异常.我正在考虑以下解决方法:

(defmacro apply-macro[func args] `(~func ~@args))
Run Code Online (Sandbox Code Playgroud)

乍一看,它看起来效果很好:

(apply-macro and [true 5]); 5
(apply-macro and [true 5 0]); 0
(let [a 0] (apply-macro and [true a])); 0
Run Code Online (Sandbox Code Playgroud)

但是,当我向它传递一个指向向量的变量时,它就崩溃了.

(let [a [true]] (apply-macro and a));  java.lang.IllegalArgumentException:
   ;Don't know how to create ISeq from: clojure.lang.Symbol
Run Code Online (Sandbox Code Playgroud)

多么令人失望!!!!

知道怎么解决apply-macro

clojure

27
推荐指数
2
解决办法
4551
查看次数

在clojure中,如何将'和'应用到列表中?

在结束时,我们如何应用and或任何其他宏到列表?

这不起作用:

(apply and '(true false))
Run Code Online (Sandbox Code Playgroud)

因为apply不能取宏的价值.

那么,检查列表中所有元素是否为真的最佳方法是什么?

clojure

23
推荐指数
3
解决办法
3986
查看次数

在clojure中,如何合并将映射与相同键组合在一起的多个映射到列表中?

在Clojure中,我想将几​​个映射组合成一个映射,其中具有相同键的映射被组合到一个列表中.

例如:

{:humor :happy} {:humor :sad} {:humor :happy} {:weather :sunny}
Run Code Online (Sandbox Code Playgroud)

应该导致:

{:weather :sunny, :humor (:happy :sad :happy)}
Run Code Online (Sandbox Code Playgroud)

我想过:

(merge-with (comp flatten list) data)
Run Code Online (Sandbox Code Playgroud)

但它效率不高,因为flatten具有O(n)复杂度.

然后我提出:

(defn agg[x y] (if (coll? x) (cons y x) (list y x)))
(merge-with agg data)
Run Code Online (Sandbox Code Playgroud)

但这感觉不是惯用的.还有其他想法吗?

clojure

19
推荐指数
1
解决办法
5898
查看次数

当父母旋转或翻译时,"position:fixed"div不固定

div"position: fixed"被嵌入到一个父div.当父母旋转或翻译时,孩子div也会移动.

这是一个错误吗?我希望孩子div能够保持固定.

HTML片段:

 <div id="mask">
    <div id="page">
    </div>
 </div>
Run Code Online (Sandbox Code Playgroud)

请访问:http://jsfiddle.net/PseKK/

我知道我可以通过对孩子应用逆向转换来修复它,div但出于性能原因,在我的实际场景中,我正在寻找一种不涉及额外转换的解决方案.

任何想法如何克服?

html javascript css webkit

17
推荐指数
1
解决办法
1万
查看次数

在Clojure中,是否可以结合memoization和尾部调用优化?

在clojure中,我想编写一个尾递归函数,为后续调用记忆其中结果.

[编辑:这个问题已被重写gcd,而不是使用factorial.]

记忆gcd(最大公约数)可以像这样实现:

(def gcd (memoize (fn [a b] 
   (if (zero? b) 
       a 
       (recur b (mod a b)))) 
Run Code Online (Sandbox Code Playgroud)

在此实现中,不会为后续调用记忆中间结果.例如,为了计算,称为中间结果.但是,没有存储在memoized函数的缓存中,因为递归点是未被记忆的匿名函数.gcd(9,6)gcd(6,3)gcd(6,3)recur

因此,如果在打电话后gcd(9,6),我们打电话说gcd(6,3)我们不会从备忘录中受益.

我能想到的唯一解决方案是使用普通的递归(明确地调用gcd而不是recur),但是我们不会从尾部调用优化中受益.

底线

有没有办法实现两者:

  1. 尾调用优化
  2. 为后续调用记录中间结果

备注

  1. 这个问题类似于Combine memoization和tail-recursion.但那里的所有答案都与之相关F#.在这里,我正在寻找答案clojure.
  2. 这个问题已经被"欢乐的Clojure"(第12.4章)留给了读者.您可以在http://bit.ly/HkQrio查阅该书的相关页面.

recursion tail-recursion clojure memoization

14
推荐指数
1
解决办法
2058
查看次数

在clojure中,如何使用匿名函数文字来编写身份函数?

如何使用匿名函数文字(#())在clojure中编写身份函数?

以下代码不起作用:

(#(%) 5)
Run Code Online (Sandbox Code Playgroud)

它引发了一个异常,因为它被转换为:

((fn[x] (x)) 5)
Run Code Online (Sandbox Code Playgroud)

问题在于,当使用#()时,函数体用括号括起来.任何想法,如何优雅地克服这个?

clojure anonymous-function

11
推荐指数
1
解决办法
1524
查看次数