亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何根據條件獲得獨特的物品

如何根據條件獲得獨特的物品

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 關注
  • 117 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號