簡體   English   中英

如何刪除此代碼 Javascript 上的突變?

[英]How to remove mutation on this code Javascript?

我設法編寫了我需要的代碼,但我想讓它干凈並刪除realtiveGroups.push()的突變,但不知道如何實現它。 如何從此代碼中刪除突變?

export interface OfferCategory {
  id: string;
  name: string;
}

export interface OfferGroup {
  groupId: string;
  dependsOn: OfferCategory;
  name: string;
  rule: Rule;
  products: PosProducts[];
}

function relativesFromSubscription(groups: OfferGroup[], dependingGroups: OfferGroup[]): OfferGroup[] {
    const relativeGroups: OfferGroup[] = [];
    groups.forEach(group => {
      if (dependingGroups.some(dependingGroup => group?.dependsOn?.id === dependingGroup.groupId)) {
        relativeGroups.push(group);
      }
      if (relativeGroups.some(relativeGroup => group?.dependsOn?.id === relativeGroup.groupId)) {
        relativeGroups.push(group);
      }
    });
    return relativeGroups;
  }

與其在一個周期內完成所有事情,不如嘗試將其分成幾個:

function relativesFromSubscription(groups: OfferGroup[], dependingGroups: OfferGroup[]): OfferGroup[] {
    const groups1 = groups.filter(group => dependingGroups.some(dependingGroup => group?.dependsOn?.id === dependingGroup.groupId));
    const groups2 = groups.filter(group => groups1.some(relGroup=> group?.dependsOn?.id === relGroup.groupId)); 
    return [...groups1, ...groups2];
}

使用您的代碼和Array.filter

const relativeGroups: OfferGroup[] = groups.filter(group => {
    return dependingGroups.some(dependingGroup => group?.dependsOn?.id === dependingGroup.groupId) || relativeGroups.some(relativeGroup => group?.dependsOn?.id === relativeGroup.groupId)
});

或者,如果您希望代碼更具可讀性,您可以添加描述性變量:

const relativeGroups: OfferGroup[] = groups.filter(group => {
  const hasDependingGroups = dependingGroups.some(dependingGroup => group?.dependsOn?.id === dependingGroup.groupId);

  const hasRelativeGroups = relativeGroups.some(relativeGroup => group?.dependsOn?.id === relativeGroup.groupId)

  return hasDependingGroups || hasRelativeGroups
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM