gpt4 book ai didi

javascript - 不带参数的 CouchDB Emit

转载 作者:行者123 更新时间:2023-11-30 12:05:09 24 4
gpt4 key购买 nike

考虑以下代码:

module.exports = {
by_author: {
map: function(doc) {
if ('authors' in doc) {
doc.authors.forEach(emit);
}
}.toString(),
reduce: '_count'
},

by_subject: {
map: function(doc) {
if ('subjects' in doc) {
doc.subjects.forEach(function(subject){
emit(subject, subject);

subject.split(/\s+--\s+/).forEach(function(part){
emit(part, subject);
});
});
}
}.toString(),

reduce: '_count'
}
};

它看起来不像 doc.authors.forEach(emit); 是有效的语法(或良好的编码),但它在语法上似乎是正确的。

我的问题是,这个是以下内容的简写吗:

doc.authors.forEach(function(_doc) {
emit(_doc.id, _doc);
});

如果是这样,使用这种速记有什么好处吗?它是如何工作的?

引用。 https://wiki.apache.org/couchdb/Introduction_to_CouchDB_views#Map_Functions

最佳答案

emit是 CouchDB 公开的一个函数。在 JS 中函数是一流的。 (并且可以作为参数传递给其他函数)

为了代替解释所有这些,我将只向您展示您的代码实际在做什么。 (如果您是新手,请阅读更多关于 JS 中的函数的信息)

doc.authors.forEach(emit);

doc.authors.forEach(function (item, index, list) {
emit(author, index, list);
});

在 JS 中,传递给 forEach 处理程序 fn 的参数是:

  • 数组中的项目(即:“some user”)
  • 该项目在数组中的索引(例如:0)
  • 整个数组(例如:[ "some user"])

emit() 函数只接受 2 个参数,因此第 3 个参数将被忽略。因此,在单个项目数组的情况下,您将得到等效于 emit("some user", 0)。如果有多个项目,您也会得到其他发射。

关于javascript - 不带参数的 CouchDB Emit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35440439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com