【问题标题】:lodash uniq - choose which duplicate object to keep in array of objectslodash uniq - 选择要保留在对象数组中的重复对象
【发布时间】:2016-01-08 23:09:06
【问题描述】:

是否有任何方法可以根据非空键指定要保留的数组项。似乎 uniq 只是保持第一次出现。

例如:

var fruits = [
{'fruit': 'apples', 'location': '', 'quality': 'bad'}, 
{'fruit': 'apples', 'location': 'kitchen', 'quality': 'good'}, 
{'fruit': 'pears', 'location': 'kitchen', 'quality': 'excellent'}, 
{'fruit': 'oranges', 'location': 'kitchen', 'quality': ''}
];


console.log(_.uniq(fruits, 'fruit'));


/* output is:

Object { fruit="apples",  quality="bad",  location=""}
Object { fruit="pears",  location="kitchen",  quality="excellent"}
Object { fruit="oranges",  location="kitchen",  quality=""}

*/

有没有办法告诉 lodash uniq 选择具有位置值的副本?它保留了坏苹果而不是好苹果。

~~~

我的最终解决方案是在 uniq 中使用 sortByOrder

console.log(_.uniq(_.sortByOrder(fruits, ['fruit','location'], ['asc','desc']),'fruit'))

导致:

Object { fruit="apples",  location="kitchen",  quality="good"}
Object { fruit="oranges",  location="kitchen",  quality=""}
Object { fruit="pears",  location="kitchen",  quality="excellent"}

【问题讨论】:

    标签: javascript arrays unique lodash uniq


    【解决方案1】:

    根据我在https://lodash.com/docs#uniq 的文档中看到的内容,无法指定这一点。可能您想要做的是 groupBy 水果,然后您可以选择所需的质量。这取决于上下文以及您需要它的原因。

    你能再解释一下你的问题吗?

    【讨论】:

    • 谢谢,NicoAzrak,这个建议帮助我解决了这个问题。这就是我所做的:console.log(.uniq(.sortByOrder(fruits, ['fruit','location'], ['asc','desc']),'fruit') )
    • 如果其中一个属性是时间戳,排序会正常工作吗?
    猜你喜欢
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 2016-08-16
    • 2020-04-23
    相关资源
    最近更新 更多