2017-09-13 74 views
0

一個MongoDB的查詢給了我一個結果數組是這樣的:JS /下劃線:_.groupBy或_.uniq讓現場的獨特/分組元素是現有

var result = [ 
    { 
    _id: 'GrRQ56ZvTGpSajvCr', 
    title: 'Element 1' 
    meta: { 
     groupId: '1' 
    } 
    }, 
    { 
    _id: 'nQs7T5QZcjbyxe6Yh', 
    title: 'Element 2' 
    meta: { 
     groupId: '1' 
    } 
    }, 
    { 
    _id: 'cbDqv6ExZoYJQJLnP', 
    title: 'Element 3' 
    meta: { 
     groupId: '2' 
    } 
    }, 
    { 
    _id: 'v6ExZoYcbDqJQJLnP', 
    title: 'Element 4' 
    meta: { 
     groupId: '2' 
    } 
    }, 
    { 
    _id: 'qbqiEGwsGyprfutZM', 
    title: 'Element 5' 
    meta: { 
    } 
    }, 
    { 
    _id: 'rfutZMqbqiEGwsGyp', 
    title: 'Element 6' 
    meta: { 
    } 
    } 
] 

現在我需要輸出的每個元件,而不groupID和每個相同groupId只有一個元素。 (我不能在我的MongoDB的查詢中使用distinctaggregate直接,所以我有這個結果工作)

所以我想用_.unique_.groupBy的。

const resultGroupBy = _.groupBy(result, function(element) { return element.meta.groupId }) 
const resultUnique = _.uniq(result, function(item, key, a) { return item.a }) // don't understand the syntax for this :-(

但是兩者都沒有按需要工作。

我的結果應該是:

groupedResult.map((element) => { 
    console.log(element.title, kindOfCounter) 
}) 

Element 1, 2 // Two elements for group 1 
Element 3, 2 // Two elements for group 2 
Element 5, 1 // Single element without group 
Element 6, 1 // Single element without group 

元件2和元件4被去除,爲組1和組2應該由只有一個元素來表示,雖然有在開頭兩個元素。

回答

0

我認爲_.uniq應該做你想做的。

var result = [ 
 
    { 
 
    _id: 'GrRQ56ZvTGpSajvCr', 
 
    title: 'Element 1', 
 
    meta: { 
 
     groupId: '1' 
 
    } 
 
    }, 
 
    { 
 
    _id: 'nQs7T5QZcjbyxe6Yh', 
 
    title: 'Element 2', 
 
    meta: { 
 
     groupId: '1' 
 
    } 
 
    }, 
 
    { 
 
    _id: 'cbDqv6ExZoYJQJLnP', 
 
    title: 'Element 3', 
 
    meta: { 
 
     groupId: '2' 
 
    } 
 
    }, 
 
    { 
 
    _id: 'v6ExZoYcbDqJQJLnP', 
 
    title: 'Element 4', 
 
    meta: { 
 
     groupId: '2' 
 
    } 
 
    }, 
 
    { 
 
    _id: 'qbqiEGwsGyprfutZM', 
 
    title: 'Element 5', 
 
    meta: { 
 
    } 
 
    }, 
 
    { 
 
    _id: 'rfutZMqbqiEGwsGyp', 
 
    title: 'Element 6', 
 
    meta: { 
 
    } 
 
    } 
 
]; 
 

 
var resultUniq = _.uniq(result, e => e.meta.groupId); 
 
console.log(resultUniq.map(e => e.title));
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

Element 6不包括在結果中,因爲它沒有groupId。您可以更改iteratee函數,以便在e.meta.groupId未定義時返回默認值。