繁体   English   中英

将数组的 object 的数组与 javascript 中的另一个数组进行比较

[英]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

您可以使用mapfilter轻松实现此结果。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM