3
對於像列表(有許多許多條目):我可以在lodash中過濾countBy嗎?
-
id: cs13157
name: 'Current Load'
-
id: cs1085
name: 'Check CPU'
-
id: cs1070
name: Uptime
-
id: cs1070
name: 'Total Processes'
我有一個.countBy
對於正在恢復一些計數是大於1,有些等於1。我只關心更大的IDS超過1個值,因爲這表示問題。但由於countBy返回一個大對象,我必須循環哈希表中的值:
counts = ld(list).countBy('id').value();
for (k in counts) {
v = counts[k];
if (!(v > 1)) {
continue;
}
logger.error("found duplicate value for ID " + k);
errored = true;
}
// throw if errored is true
這似乎像太多的代碼,但我看不到的方式來與lodash迅速做到這一點。我可以pluck
/map
/filter
找到錯誤的值。有很多方法可以做到這一點,但我想知道是否有一種方法可以只用lodash獲得大於1的ID列表,而不用循環。
SSCE:
var arr, keys, ld, s;
s = "- {id: 2240errorapp, name: 'app error count'}\n- {id: 2240errorinf, name: 'infrastructure error count'}\n- {id: '2112', name: calls}\n- {id: '2112', name: calls}\n- {id: 2112v, name: violations}\n- {id: 2112avg, name: 'average response time'}\n- {id: 2112errorapp, name: 'app error count'}\n- {id: 2112errorinf, name: 'infrastructure error count'}";
ld = require('lodash');
arr = (require('yamljs')).parse(s);
keys = ld(arr).countBy('id').filter(function(k, v) {
return k[v] > 1;
}).value();
console.dir(keys);
預期值:['2112']
(重複)。實際值:[]
。
如果我有3個重複項,就會返回類似'[2,2,2]'的東西。 – jcollum
@jcollum .uniq()之後? – djechlin
難道這不會返回'2'嗎? – jcollum