在 CouchDb 中展平数组
Flatten Array in CouchDb
我正在学习 CouchDb,但遇到了问题
我有两个文件
{
"_id": "2a8b8edb5d47c1e9fbafd414f60023af",
"_rev": "4-e305faba47bcb08569d225b181ba927e",
"skills": [
"js",
"php"
],
"type": "user",
"age": 32
}
{
"_id": "2a8b8edb5d47c1e9fbafd414f6002443",
"_rev": "4-edbfaa004143fc65df823f60b7f9ee94",
"skills": [
"js",
"nodejs",
"angular"
],
"type": "user",
"age": 28
}
我想检索像
这样的数组
['js','php','nodejs','angular']
没有重复。我试过这张地图
function(doc) {
var user = [];
for (item in doc.skills) {
user.push(doc.skills[item]);
}
emit( doc.type, user);
}
我得到了
["js", "php"]
["js", "nodejs", "angular"]
我试过这个 reduce
function (key, skills){
var skill = [];
skill.push(skills);
return skill
}
结果是
[[["js", "nodejs", "angular"], ["js", "php"]]]
在您的 reduce 函数中,skills
是技能列表的列表,因此您需要将每个技能连接到结果中:
function(key, skills) {
var result = [];
var seen = {};
skills.forEach(function(s) {
s.forEach(function(skill) {
if (seen[skill])
return;
seen[skill] = true;
result.push(skill);
});
});
return result;
}
我正在学习 CouchDb,但遇到了问题
我有两个文件
{
"_id": "2a8b8edb5d47c1e9fbafd414f60023af",
"_rev": "4-e305faba47bcb08569d225b181ba927e",
"skills": [
"js",
"php"
],
"type": "user",
"age": 32
}
{
"_id": "2a8b8edb5d47c1e9fbafd414f6002443",
"_rev": "4-edbfaa004143fc65df823f60b7f9ee94",
"skills": [
"js",
"nodejs",
"angular"
],
"type": "user",
"age": 28
}
我想检索像
这样的数组['js','php','nodejs','angular']
没有重复。我试过这张地图
function(doc) {
var user = [];
for (item in doc.skills) {
user.push(doc.skills[item]);
}
emit( doc.type, user);
}
我得到了
["js", "php"]
["js", "nodejs", "angular"]
我试过这个 reduce
function (key, skills){
var skill = [];
skill.push(skills);
return skill
}
结果是
[[["js", "nodejs", "angular"], ["js", "php"]]]
在您的 reduce 函数中,skills
是技能列表的列表,因此您需要将每个技能连接到结果中:
function(key, skills) {
var result = [];
var seen = {};
skills.forEach(function(s) {
s.forEach(function(skill) {
if (seen[skill])
return;
seen[skill] = true;
result.push(skill);
});
});
return result;
}