为了账号安全,请及时绑定邮箱和手机立即绑定

如何根据条件获得独特的物品

如何根据条件获得独特的物品

ITMISS 2022-11-11 13:10:22
我有一个 Javascript 片段来仅将唯一项目存储在这样的对象数组中:-const array = [    {id: 3, name: 'Central Microscopy', fiscalYear: 2018},    {id: 5, name: 'Crystallography Facility', fiscalYear: 2018},    {id: 3, name: 'Central Microscopy', fiscalYear: 2017},    {id: 5, name: 'Crystallography Facility', fiscalYear: 2017},    {id: 3, name: 'Central Microscopy', fiscalYear: 2019},  ];  const result = [];  const map = new Map();  for (const item of array) {    if (!map.has(item.id) ) {      map.set(item.id, true); // set any value to Map      result.push({        id: item.id,        name: item.name,        fiscalYear: item.fiscalYear      });    }  }  console.log(result);因为这个结果是[  { id: 3, name: 'Central Microscopy', fiscalYear: 2018 },  { id: 5, name: 'Crystallography Facility', fiscalYear: 2018 }]现在我想拥有独特的项目,并拥有那些会计年度大于现有项目的项目。例如:- 对于相同的输入,输出应为:- 我需要 javascript 或 typescript 中的代码(语言约束)[  { id: 3, name: 'Central Microscopy', fiscalYear: 2019},  { id: 5, name: 'Crystallography Facility', fiscalYear: 2018 }]即使数据很大,也需要最优解
查看完整描述

2 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

let array = [

    {id: 3, name: 'Central Microscopy', fiscalYear: 2018},

    {id: 5, name: 'Crystallography Facility', fiscalYear: 2018},

    {id: 3, name: 'Central Microscopy', fiscalYear: 2027},

    {id: 3, name: 'Central Microscopy', fiscalYear: 2017},

    {id: 5, name: 'Crystallography Facility', fiscalYear: 2017},

    {id: 3, name: 'Central Microscopy', fiscalYear: 2019},

    {id: 3, name: 'Central Microscopy', fiscalYear: 2021},

  ];

  

  let temp = array.filter((elem) => elem.fiscalYear >= 2018)

  let cache = {}


  temp.forEach((elem) => {

      if(cache[elem.name]){

          if(cache[elem.name].fiscalYear < elem.fiscalYear){

              cache[elem.name] = elem;

          }

      }

      else{

           cache[elem.name] = elem;

      }

  })


  let result = Object.values(cache);

  console.log(result);


查看完整回答
反对 回复 2022-11-11
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

您只需要在循环中再添加一个过滤器,


  let bigYear = item.fiscalYear


  let filteredItem = array.filter((e=>e.id===item.id && e.fiscalYear > bigYear))[0]


  result.push(filteredItem ? {...filteredItem} : item);

最终片段看起来很相似,


const array = [

    {id: 3, name: 'Central Microscopy', fiscalYear: 2018},

    {id: 3, name: 'Central Microscopy', fiscalYear: 2029},

    {id: 3, name: 'Central Microscopy', fiscalYear: 2017},

    {id: 5, name: 'Crystallography Facility', fiscalYear: 2017},

    {id: 5, name: 'Crystallography Facility', fiscalYear: 2018},

  ];

  const result = [];

  const map = new Map();

  for (const item of array) {

    if (!map.has(item.id) ) {

      map.set(item.id, true); // set any value to Map

      let bigYear = item.fiscalYear

      let filteredItem = array.filter((e=>e.id===item.id && e.fiscalYear > bigYear))[0]

      result.push(filteredItem ? {...filteredItem} : item);

    }

  }

  console.log(result);


查看完整回答
反对 回复 2022-11-11
  • 2 回答
  • 0 关注
  • 56 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信