发出已排序数组的哈希值

时间:2011-11-03 20:24:49

标签: couchdb

我有一份具有以下结构的文件:

{
   tags: ['bbb', 'aaa', 'ddd', 'ccc']
}

我想创建一个视图,它将有序标签数组的哈希值作为键返回。我的方法是对tags数组进行排序,然后计算排序数组的哈希值。

我正在努力解决的问题是如何在CouchDB视图的map函数中对数组进行排序?似乎Array#sort()方法不起作用/不可用。

我不能假设tags数组存储为有序数组。

1 个答案:

答案 0 :(得分:4)

我明白了。问题是我试图对tags数组进行排序,但这在CouchDB中受到限制,因为无法修改文档属性。

因此,我必须'克隆'数组,然后对新创建的数组进行排序。

// map.js
function(doc) {
    // create sorted array
    var tagsCopy = doc.tags.slice();
    tagsCopy.sort();

    // calculate hash
    var hash = '';
    for (var idx in tagsCopy) {
        hash += tagsCopy[idx];
    }
    return require('views/lib/sha1').hex(hash);
}

views/lib/sha1是CouchDB提供的sha1.js文件。