首页 > 解决方案 > 通过javascript中的最小值属性过滤对象

问题描述

我有一个对象数组,如下所示:

[
    {
        "id": 100,
        "Name": "T1",
        "amt": 15,
    },
    {
        "id": 102,
        "Name": "T3",
        "amt": 15,
    },
    {
        "id": 100,
        "Name": "T1",
        "amt": 20,
    },
    {
        "id": 105,
        "Name": "T6",
        "amt": 15,
    }
]

我想通过amt的最小值过滤数组中的对象。有两个对象的 id 为 100,但amt不同(15 和 20)。我想过滤最小值 15。输出应该是:

[
    {
        "id": 100,
        "Name": "T1",
        "amt": 15,
    },
    {
        "id": 102,
        "Name": "T3",
        "amt": 15,
    },
    {
        "id": 105,
        "Name": "T6",
        "amt": 15,
    }
]

我关注了这篇文章,但不适合我的问题。有没有更简单的方法来做到这一点,无论是纯 JavaScript 还是 lodash?

标签: javascriptlodash

解决方案


您可以分组id并从每个组中取出最小值为 的对象amt

var data = [{ id: 100, Name: "T1", amt: 15 }, { id: 102, Name: "T3", amt: 15 }, { id: 100, Name: "T1", amt: 20 }, { id: 105, Name: "T6", amt: 15 }],
    result = _(data)
        .groupBy('id')
        .map(group => _.minBy(group, 'amt'))
        .value();

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>


推荐阅读