gpt4 book ai didi

javascript - 使用 _.uniqBy 在 lodash 中保留具有较大键值的对象

转载 作者:行者123 更新时间:2023-11-30 11:43:53 32 4
gpt4 key购买 nike

JSFiddle Example

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 期间的投票值?

我也试过在 _.uniqBy 之前先运行 _.orderBy 但不能保证 {'vote':341,'name': 'A'} 将被删除。

Example

我正在使用 lodash 4.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)


Lodash 方法

逻辑

  • 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>

关于javascript - 使用 _.uniqBy 在 lodash 中保留具有较大键值的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41671509/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com