首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在从API返回的JSON对象内的数组中查找具有重复值的条目

在从API返回的JSON对象内的数组中查找具有重复值的条目
EN

Stack Overflow用户
提问于 2018-07-11 16:15:41
回答 2查看 76关注 0票数 1

我有一个API,它的响应如下

代码语言:javascript
复制
{conditions:{,…}
individuals:[{employee_id: 12300, employee_type: "Permanent", person_id: "1211211", full_name: "John Jacobs",…},…]
page_num:5
rows:10
total_count:213}

individuals数组中的每个条目如下所示

代码语言:javascript
复制
[ { employee_id: 12300,
    employee_type: 'Permanent',
    person_id: '1211211',
    full_name: 'John Jacobs',
    email_id: 'john_jacobs@gmail.com',
    person_role: [ 
    {rg_code: "AP",
    cl_code: "12",
    data : "South East Asia",
    loc_code : "IN"},

    {rg_code: "CD",
    cl_code: "15",
    data : "Middle East Asia",
    loc_code : "QY"},

    {rg_code: "AP",
    cl_code: "12",
    data : "South East Asia",
    loc_code : "IN"},

    {rg_code: "DF",
    cl_code: "34",
    data : "South East Europe",
    loc_code : "FR"}
     ],
    staffings: [ {id: 1244,
    ind_id: 113322,
    p_id : 112,
    p_name: "Bollywood"},

     {id: 1245,
    ind_id: 112322,
    p_id : 113,
    p_name: "Tollywood"},
    ],
    first_name: 'John',
    last_name: 'Jacobs',
    location:
     { country: 'India',
       region: 'South Asia',
       code: 'SA/IN',
       name: 'Bangalore' },
    assistants: [ {} ],
    job_title: 'SSE-2',
    person_full_name: 'John Jacobs'}
     ]

我正在尝试查找individuals数组中的所有条目,这些条目在person_role中具有相同loc_code的重复条目-例如-在下面给出的示例条目中,有两个loc_code = 'IN'条目。不使用for loops,而只使用filterreduce方法,这个解决方案可能吗?

EN

回答 2

Stack Overflow用户

发布于 2018-07-11 17:16:42

您可以应用filter,然后reduce来为该人员构造一组loc_codes。如果集合的值数量与原始人数相同,这意味着它们都是不同的。性能可以提高,因为它遍历整个person_role阵列,即使它可以在第一个副本处停止。

代码语言:javascript
复制
var filtered = individuals.filter(el => {
    return el.person_role.reduce( (prev, cur) => { 
        return prev.add(cur.loc_code);
    }, new Set() ).size !== el.person_role.length;
});


console.log(filtered);
票数 0
EN

Stack Overflow用户

发布于 2018-07-11 23:06:55

您可以将唯一项的大小与总大小进行比较。我的解决方案涉及到使用reduce并将过滤功能提取到一个单独的函数中:

代码语言:javascript
复制
function hasDuplicateLoc({ person_role }) {

    const uniq = person_role.reduce((all, {loc_code}) => {

        if (!all.includes(loc_code)) all.push(loc_code);
        return all;

    }, []);

    return person_role.length !== uniq.length;

}

const result = individuals.filter(hasDuplicateLoc);

console.log(result);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51280449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档