- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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'}
将被删除。
我正在使用 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)
逻辑
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/
我有数组: [ [ '245', '0', '0.0100', '245,0,0.01' ], [ '245', '1', '0.0100', '245,1,0.01' ], [ '208',
const uniqBy = (arr, fn) => { let res = [] const hash = new Set() for (let i = 0; i arr.filte
const data = [ {id: "001", failedReason: [1000]}, {id: "001", failedReason: [1001]}, {id: "001", fai
JSFiddle Example let obj = [{'vote':999,'name':'D'}, {'vote':341,'name':'A'},
在这段代码中,我被困在了 _.uniqBy(array,iteratee),this iteratee 可以是函数,也可以是字符串 在哪里放置条件以检查属性的唯一性,因为 itratee 函数可以是任
这是我使用 lodash 的代码 console.log('stackList2', stackList2); console.log('stackList2.length', stackList2.
我是一名优秀的程序员,十分优秀!