我正在学习无点函数,并试图以该样式实现这个递归的空删除器.
工作,但不是免费的:
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
我正在研究面向对象的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是否有充分的理由使用这样的阵列?你能解释一下吗?或者,这是我应该提交给勘误的内容吗?
如果变量(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语句.
有没有办法让这个顺序运行,或者,我应该使用不同的方法吗?
我正在尝试根据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 …
我正在研究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和 …
javascript ×3
arrays ×1
clojure ×1
dropbox-api ×1
http-post ×1
oauth ×1
pointfree ×1
pug ×1
ramda.js ×1
recursion ×1
refactoring ×1
request ×1