Javascript Couchdb正在尝试按数组值分组
我在转换数组时遇到问题。 下面是一个输入示例:Javascript Couchdb正在尝试按数组值分组,javascript,object,underscore.js,couchdb,Javascript,Object,Underscore.js,Couchdb,我在转换数组时遇到问题。 下面是一个输入示例: { "_id": "beaconlog_888ff29df356c803_Amsterda", "_rev": "5152-3c6e5f47d6860179cf80b9bca3efba4b", "beacon_identifier": "Amsterdam", "beacon": "office", "in_region":
{
"_id": "beaconlog_888ff29df356c803_Amsterda",
"_rev": "5152-3c6e5f47d6860179cf80b9bca3efba4b",
"beacon_identifier": "Amsterdam",
"beacon": "office",
"in_region": true
}
{
"rows": [{
"key": ["Amsterdam", "office", false],
"value": 2
}, {
"key": ["Amsterdam", "office", true],
"value": 1
}, {
"key": ["Rotterdam", "office", false],
"value": 1
}]
}
我使用以下映射函数在couchdb中创建了一个视图:
function (doc) {
if(doc.beacon) {
emit([doc.beacon_identifier, doc.beacon, doc.in_region],1);
}
}
{
"rows": [{
"key": ["Amsterdam", "office", false],
"value": 2
}, {
"key": ["Amsterdam", "office", true],
"value": 1
}, {
"key": ["Rotterdam", "office", false],
"value": 1
}]
}
对于reduce,我使用第3级组的_count
{
"rows": [{
"key": ["Amsterdam", "office", false],
"value": 2
}, {
"key": ["Amsterdam", "office", true],
"value": 1
}, {
"key": ["Rotterdam", "office", false],
"value": 1
}]
}
这是我当前的输出:
{
"rows": [{
"key": ["Amsterdam", "office", false],
"value": 2
}, {
"key": ["Amsterdam", "office", true],
"value": 1
}, {
"key": ["Rotterdam", "office", false],
"value": 1
}]
}
输出:
{
"rows": [{
"key": ["Amsterdam", "office", false],
"value": 2
}, {
"key": ["Amsterdam", "office", true],
"value": 1
}, {
"key": ["Rotterdam", "office", false],
"value": 1
}]
}
这就是我想要实现的最终结果集:
{
"rows": [{
"key": ["Amsterdam", "office", false],
"value": 2
}, {
"key": ["Amsterdam", "office", true],
"value": 1
}, {
"key": ["Rotterdam", "office", false],
"value": 1
}]
}
{
"Amsterdam": {
"inactive": 2,
"active": 1
},
"Rotterdam": {
"inactive": 1
}
}
有人能帮我吗?两种解决方案都是纯javascript
{
"rows": [{
"key": ["Amsterdam", "office", false],
"value": 2
}, {
"key": ["Amsterdam", "office", true],
"value": 1
}, {
"key": ["Rotterdam", "office", false],
"value": 1
}]
}
o.rows.reduce(function(result, input) {
var bool = input.key[2];
var city = input.key[0];
result[city] = result[city] || {};
result[city][bool] = input.value;
return result;
}, {});
第一个解决方案以原始数据集为特征,并对元素进行迭代,通过向属性添加属性获得所需的对象,并在给定的情况下添加一些值
{
"rows": [{
"key": ["Amsterdam", "office", false],
"value": 2
}, {
"key": ["Amsterdam", "office", true],
"value": 1
}, {
"key": ["Rotterdam", "office", false],
"value": 1
}]
}
var数组=[{
“_id”:“beaconlog_888ff29df356c803_Amsterda”,
“修订版”:“5152-3C6E5F47D680179CF80B9BCA3EFBA4B”,
“beacon_标识符”:“阿姆斯特丹”,
“灯塔”:“办公室”,
“in_地区”:正确
}],
结果={};
array.forEach(函数(a){
变量类型=['inactive','active'];
结果[a.beacon_标识符]=结果[a.beacon_标识符]|{};
结果[a.beacon_identifier][TYPE[+a.in_region]]=(结果[a.beacon_identifier][TYPE[+a.in_region]]0)+1;
});
document.write(“”+JSON.stringify(结果,0,4)+“”)
为什么“false”:2
对于阿姆斯特丹
?@Tushar它来自“value”
。您可能也应该添加您的输入数组,以便我们更好地理解转换。我同意,输入数组将有助于更轻松地理解问题并找出解决方案。嗨,尼娜,谢谢,它与您的解决方案配合得很好!