繁体   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