我有一个API,它的响应如下
{conditions:{,…}
individuals:[{employee_id: 12300, employee_type: "Permanent", person_id: "1211211", full_name: "John Jacobs",…},…]
page_num:5
rows:10
total_count:213}individuals数组中的每个条目如下所示
[ { 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,而只使用filter和reduce方法,这个解决方案可能吗?
发布于 2018-07-11 17:16:42
您可以应用filter,然后reduce来为该人员构造一组loc_codes。如果集合的值数量与原始人数相同,这意味着它们都是不同的。性能可以提高,因为它遍历整个person_role阵列,即使它可以在第一个副本处停止。
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);发布于 2018-07-11 23:06:55
您可以将唯一项的大小与总大小进行比较。我的解决方案涉及到使用reduce并将过滤功能提取到一个单独的函数中:
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);https://stackoverflow.com/questions/51280449
复制相似问题