小编Hen*_*all的帖子

使用ramda在JS中进行Pointfree递归

我正在学习无点函数,并试图以该样式实现这个递归的空删除器.

工作,但不是免费的:

function removeNulls(obj) {
  return R.ifElse(
    R.either(R.is(Array), R.is(Object)),
    R.pipe(
      R.filter(R.pipe(R.isNil, R.not)),
      R.map(removeNulls)
    ),
    R.identity
  )(obj)
}

module.exports = removeNulls
Run Code Online (Sandbox Code Playgroud)

以下是我对此无效的尝试:

const removeNulls = R.ifElse(
  R.either(R.is(Array), R.is(Object)),
  R.pipe(
    R.filter(R.pipe(R.isNil, R.not)),
    // throws `ReferenceError: removeNulls is not defined`
    R.map(removeNulls)
  ),
  R.identity
)
Run Code Online (Sandbox Code Playgroud)

javascript recursion functional-programming pointfree ramda.js

8
推荐指数
1
解决办法
2085
查看次数

在JS数组中使用命名键

我正在研究面向对象的Javascript原理,并且与Zakas在数组中使用命名键(而不是在对象内部)相混淆.见评论:

function EventTarget() {}

EventTarget.prototype = {

    constructor: EventTarget,

    addListener: function(type, listener) {

        if (!this.hasOwnProperty("_listeners")) {
            // Why isn't this: `this._listeners = {};`
            this._listeners = [];
        }

        if (typeof this._listeners[type] === "undefined") {
            this._listeners[type] = [];
        }

        this._listeners[type].push(listener);
    },

    // more stuff
}

var target = new EventTarget();
target.addListener("message", function(event) {
    console.log("Message is " + event.data);
});
Run Code Online (Sandbox Code Playgroud)

他的代码工作正常(如果你用数组替换对象文字就行了),但我的理解是如果你想按名称访问内容,你应该使用一个对象.来自w3schools数组文章:

许多编程语言支持具有命名索引的数组.
具有命名索引的数组称为关联数组(或哈希).
JavaScript并没有支持数组名为索引.
在JavaScript中,数组始终使用编号索引.

Zakas是否有充分的理由使用这样的阵列?你能解释一下吗?或者,这是我应该提交给勘误的内容吗?

javascript arrays

7
推荐指数
1
解决办法
3309
查看次数

jade - 如果var不等于数组中的任何元素,则显示foo

如果变量(curBranch)不等于数组中的任何元素(user.subscribed),我想给用户一个'subscribe'按钮,如果不相等,我想给'unsubscribe'按钮.我试过这个:

- if (user != null)
  isSubscribed = false
  each subscription in user.subscribed
    - if (subscription === curBranch)
      isSubscribed = true
      form(action='/unsubscribe/#{curBranch}')
        button(type='submit') Unsubscribe

  - if (isSubscribed === false)
    form(action='/subscribe/#{curBranch}')
      button(type='submit') subscribe
Run Code Online (Sandbox Code Playgroud)

第一部分(换行前)完美运行.但是,在for循环完成之前,jade似乎执行了第三个if语句.

有没有办法让这个顺序运行,或者,我应该使用不同的方法吗?

pug

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

通过request.js从代码中获取Dropbox OAuth令牌失败; 等效卷曲工作

我正在尝试根据http api文档交换我的Dropbox oauth代码以获取令牌.

当我用curl执行命令时:

curl https://api.dropbox.com/1/oauth2/token \
-d code=<authorization code> \
-d grant_type=authorization_code \
-u <app key>:<app secret>
Run Code Online (Sandbox Code Playgroud)

一切正常,我收到了我的持票人令牌.不幸的是,似乎是在node.js中使用请求模块编写的等效代码失败了.

var request = require("request");
var config = require("./config.json");

request({
  url: "https://api.dropboxapi.com/1/oauth2/token",
  method: "POST",
  auth: {
    user: config.client_id,
    pass: config.client_secret
  },
  json: {
    code: config.code,
    grant_type: "authorization_code"
  } 
}, function(err, resp, body) {
  if (err) throw err;
  console.log(body);
});
Run Code Online (Sandbox Code Playgroud)

日志:

{ error_description: 'missing required field "grant_type"',
  error: 'invalid_request' }
Run Code Online (Sandbox Code Playgroud)

文档 说如果出现400错误(这是),我有:

输入参数错误.错误消息应指明哪一个和原因.

虽然如可以从上面的代码中可以看出,grant_type 被指定.


值得注意的是,文档提供了第二种身份验证选项,尽管这也失败了,尽管有一个不同的消息:

说明(删节)

需要使用应用程序的密钥和密钥对/ oauth2/token的调用进行身份验证.这些可以作为POST参数传递(参见下面的参数)或通过HTTP基本身份验证传递.如果使用基本身份验证,则应将app键作为用户名提供,并应提供app …

javascript oauth http-post request dropbox-api

3
推荐指数
1
解决办法
994
查看次数

将clojure`defn`重构为`fn`会导致ClassCastException

我正在研究4clojure的Prime Numbers kata.我的解决方案在我的本地机器上运行得非常好(如果效率低下),但它依赖defn于4clojure 上的禁止.

(defn factors [n]
  (->> n
       range
       (map inc)
       (filter #(zero? (mod n %)))))

(defn prime? [n]
  (->> (factors n)
       (count)
       (= 2)))

(defn n-primes [n]
  (->> (range)
       (filter prime?)
       (take n)))
Run Code Online (Sandbox Code Playgroud)

我试图重构它只使用匿名函数,但它爆炸了.

(fn x-primes [count]
  (let [x-factors (fn factors [n] (->> n range (map inc) (filter #(zero? (mod n %)))))
         x-prime? (fn [n] (->> (x-factors n) (count) (= 2)))]
        (->> (range)
             (filter x-prime?)
             (take count))))
Run Code Online (Sandbox Code Playgroud)

抛出以下错误(在本地和4clojure的编辑器中运行时)

ClassCastException java.lang.Long无法强制转换为clojure.lang.IFn

我在重构代码时做错了什么?

撇开,为什么你认为4clojure禁令def和 …

refactoring clojure anonymous-function

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