javascript - 使用 Lodash 计算两个标准的总数

标签 javascript json nested underscore.js lodash

我不知道如何根据位置和唯一序列号计算设备总数。

{
"dates": [
    {
        "date": "Sep 1, 2014",
        "devices": [
            {
                "model": "Canon",
                "location": "Chicago",
                "serialNum": "abc123"
            },
            {
                "model": "Canon",
                "location": "Chicago",
                "serialNum": "xyz456"
            },
            {
                "model": "HP",
                "location": "New York",
                "serialNum": "123456"
            },
            {
                "model": "Brother",
                "location": "Chicago",
                "serialNum": "DEF777"
            }
        ]
    },
    {
        "date": "Sep 2, 2014",
        "devices": [
            {
                "model": "Canon",
                "location": "Chicago",
                "serialNum": "abc123"
            },
            {
                "model": "Canon",
                "location": "Chicago",
                "serialNum": "xyz456"
            }
        ]
    },
    {
        "date": "Sep 3, 2014",
        "devices": [
            {
                "model": "Canon",
                "location": "Chicago",
                "serialNum": "xyz456"
            },
            {
                "model": "Canon",
                "location": "Chicago",
                "serialNum": "stu789"
            },
            {
                "model": "Epson",
                "location": "NewYork",
                "serialNum": "123456"
            },
            {
                "model": "Epson",
                "location": "NewYork",
                "serialNum": "555555"
            },
            {
                "model": "HP",
                "location": "NewYork",
                "serialNum": "987654"
            }
        ]
    }
]

我想捕获每个位置的唯一设备总数

Chicago - 4
New York - 3

最佳答案

就在这里,在一个带有 lodash 链接语法的表达式中。简短的版本是将所有设备放入一个庞大的列表中,然后按位置对它们进行分组,然后为每个位置消除重复的 ID,然后对设备进行计数。

_(dates) //Begin chain
    .pluck("devices") //get the device list for each date
    .flatten() //combine all device lists into a master list
    .groupBy("location") //group into an object of {"location": [devices]} pairs
    .mapValues(function (devicesForLocation) { //replaces [devices] with a count of number of unique serial numbers
        return _(devicesForLocation) //Begin chain
            .pluck("serialNum") //get the serial number for each device
            .uniq() //remove the duplicate serial numbers
        .value() //End chain
        .length; // get the count of unique serial numbers
    }) // result is an object of {"location": countOfUniqueDevices} pairs
.value() //End chain

最终结果是以下形式的对象:{"New York": 1, "NewYork": 3, "Chicago": 4},不过您显然可以添加另一个语句以字符串形式打印出来。

我鼓励您逐步完成此步骤,以查看每一步的结果并了解其作用。

关于javascript - 使用 Lodash 计算两个标准的总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25677207/

相关文章:

javascript - 如何将函数中找到的javascript变量值存储在php变量中

javascript - 如何将 JavaScript 对象数据添加到 HTML

javascript - 尝试从对象解构值会返回错误

elasticsearch - 在Elasticsearch中将过滤器和查询whitin嵌套文档组合

c++ - C++在运行时嵌套不同类型的查找映射

javascript - 如何在浏览器 Javascript 中创建另一个时区的日期

javascript - 集中在水平元素 float ,如果可能的话,响应式

javascript - 如何将以JSON格式返回的数据分组并返回?

python : nested json to dataframe

jquery 追加和/或 html ie 动态 html 构建问题