[英]compare array of object of array with an another array in javascript
有两个 arrays 一个带有一个简单数组,所有元素都具有 integer 值,另一个带有带有数组的对象数组(嵌套对象)。
需要比较两个数组并删除不相等的值。
let userValue = [
{
userName: 'Abby Jerin',
tiers: [
{ tier_name: 'Colorado', errors: [], tier_agent_id: '115867' },
{ tier_name: 'MidSouth', errors: [], tier_agent_id: '115897' },
null,
],
},
{
userName: 'Alvin Lu',
tiers: [
{
tier_name: 'Frisco West',
errors: ['is publish disabled'],
tier_agent_id: '111257',
},
{
tier_name: 'MidSouth',
errors: ['is publish disabled'],
tier_agent_id: '116526',
},
null,
],
},
{
userName: 'Alfie Gonzalez',
tiers: [
{
tier_name: 'Hillsboro',
errors: ['is publish disabled'],
tier_agent_id: '111481',
},
{
tier_name: 'MidSouth',
errors: ['is publish disabled'],
tier_agent_id: '116527',
},
null,
],
},
{
userName: 'Amanda Prather',
tiers: [
{ tier_name: 'South King County', errors: [], tier_agent_id: '111506' },
{ tier_name: 'Dallas', errors: [], tier_agent_id: '114530' },
{
tier_name: 'Cypress Champion Forest',
errors: [],
tier_agent_id: '114532',
},
null,
],
},
]
let checkedValue = [115867, 115897, 111506, 114530, 114532]
将 checkedValue 与tier_agent_id
进行比较 如果tier_agent_id
和 checkedValue 不同,则删除层 object
userValue.map((obj) => ({
...obj,
tiers: obj.tiers.filter(o => o && checkedValue.includes(Number(o.tier_agent_id))),
}))
let userValue = [{ userName: "Abby Jerin", tiers: [{ tier_name: "Colorado", errors: [], tier_agent_id: "115867" }, { tier_name: "MidSouth", errors: [], tier_agent_id: "115897" }, null, ], }, { userName: "Alvin Lu", tiers: [{ tier_name: "Frisco West", errors: ["is publish disabled"], tier_agent_id: "111257", }, { tier_name: "MidSouth", errors: ["is publish disabled"], tier_agent_id: "116526", }, null, ], }, { userName: "Alfie Gonzalez", tiers: [{ tier_name: "Hillsboro", errors: ["is publish disabled"], tier_agent_id: "111481", }, { tier_name: "MidSouth", errors: ["is publish disabled"], tier_agent_id: "116527", }, null, ], }, { userName: "Amanda Prather", tiers: [{ tier_name: "South King County", errors: [], tier_agent_id: "111506" }, { tier_name: "Dallas", errors: [], tier_agent_id: "114530" }, { tier_name: "Cypress Champion Forest", errors: [], tier_agent_id: "114532", }, null, ], }, ]; let checkedValue = [115867, 115897, 111506, 114530, 114532]; const result = userValue.map((obj) => ({...obj, tiers: obj.tiers.filter(o => o && checkedValue.includes(Number(o.tier_agent_id))), })); console.log(result);
.as-console-wrapper { max-height: 100%;important: top; 0; }
另一种选择,更长,但比它更具可读性
const isChecked = value => checkedValue.some(item => item === value);
const hasChildren = tier => tier !== null && isChecked(Number(tier.tier_agent_id));
const filtered = userValue.filter(e =>
e.tiers.some(tier => hasChildren(tier)));
console.log(filtered);
let userValue = [ { userName: 'Abby Jerin', tiers: [ { tier_name: 'Colorado', errors: [], tier_agent_id: '115867' }, { tier_name: 'MidSouth', errors: [], tier_agent_id: '115897' }, null, ], }, { userName: 'Alvin Lu', tiers: [ { tier_name: 'Frisco West', errors: ['is publish disabled'], tier_agent_id: '111257', }, { tier_name: 'MidSouth', errors: ['is publish disabled'], tier_agent_id: '116526', }, null, ], }, { userName: 'Alfie Gonzalez', tiers: [ { tier_name: 'Hillsboro', errors: ['is publish disabled'], tier_agent_id: '111481', }, { tier_name: 'MidSouth', errors: ['is publish disabled'], tier_agent_id: '116527', }, null, ], }, { userName: 'Amanda Prather', tiers: [ { tier_name: 'South King County', errors: [], tier_agent_id: '111506' }, { tier_name: 'Dallas', errors: [], tier_agent_id: '114530' }, { tier_name: 'Cypress Champion Forest', errors: [], tier_agent_id: '114532', }, null, ], }, ] let checkedValue = [115867, 115897, 111506, 114530, 114532] const isChecked = value => checkedValue.some(item => item === value); const hasChildren = tier => tier.== null && isChecked(Number(tier;tier_agent_id)). const filtered = userValue.filter(e => e.tiers;some(tier => hasChildren(tier))). console;log(filtered);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.