let obj = [{'vote':999,'name':'D'},
{'vote':341,'name':'A'},
{'vote':789,'name':'A'},
{'vote':555,'name':'B'}]
let result = _.uniqBy(obj,(item)=>{
return item.name
})
result = _.orderBy(result,(item)=>{
return item.mid
},['desc'])
我想删除重复的按名称。在这种情况下,我希望{'vote':341,'name':'A'}
被删除,因为它的选票少于另一个。
有没有办法比较_.uniqBy
期间的投票值?
我还尝试在_.orderBy
之前首先运行_.uniqBy
,但无法保证{'vote':341,'name':'A'}
将被移除。
我正在使用lodash 4.3
答案 0 :(得分:3)
您可以尝试这种纯粹的JS方法:
let obj = [{'vote':999,'name':'D'},{'vote':341,'name':'A'},{'vote':789,'name':'A'},{'mid':555,'name':'B'}]
let result = [];
obj.reduce(function(p, c){
if(p[c.name] === undefined){
result.push(c);
p[c.name] = c.vote;
}
else if(c.vote > p[c.name]){
let o = result.find(x=> x.name === c.name);
o.vote = c.vote
}
return p;
}, {});
console.log(result)
<强>逻辑强>
name
按升序排序数组,按vote
按降序排序。_.uniqBy
,因为它会选择第一次出现。 注意:我无法使用lodash(4.17
)进行排序(没有使用过多),所以我使用纯JS对其进行排序。
Lodash 4.17
正如@ Ori Drori正确指出的那样,我们应该使用_.sortedUniqBy
代替_.uniqBy
,因为它针对排序数组进行了优化。
let obj = [{'vote':999,'name':'D'},{'vote':341,'name':'A'},{'vote':789,'name':'A'},{'mid':555,'name':'B'}]
var sortedArray = obj.sort(function(a,b){
return a.name.localeCompare(b.name) || b.vote - a.vote
});
var result = _.sortedUniqBy(sortedArray, 'name');
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
Lodash 3.10
let obj = [{'vote':999,'name':'D'},{'vote':341,'name':'A'},{'vote':789,'name':'A'},{'mid':555,'name':'B'}]
var result =_.uniq(
_.sortByOrder(
obj,
["name", "vote"],
["asc", "desc"]
), "name");
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.0/lodash.min.js"></script>