ZBLOG

useEffect(() => { if (!initData || !initData?.serviceDetailList?.length) return let arrFilter = [] //选中的服务 initData?.serviceDetailList?.forEach((item) => { //已选数量 const selectedCount = item.serviceList.filter((service) => {...

要按照倒序将元素推入 arrFilter 数组,你可以在使用 push 方法之前反转数组,或者直接在添加新项时插入到数组的开头。以下是对你的代码进行调整后的版本,展示了如何将选中的服务按倒序推入 arrFilter

你可以通过使用 unshift 方法来实现这一点,这样会将元素添加到数组的开头:

useEffect(() => {
    if (!initData || !initData?.serviceDetailList?.length) return;
    
    let arrFilter = []; // 选中的服务
    initData.serviceDetailList.forEach((item) => {
        // 已选数量
        const selectedCount = item.serviceList.filter((service) => {
            if (service.num) {
                arrFilter.unshift({ // 使用 unshift 添加到开头
                    category: item?.category,
                    categoryName: item?.categoryName,
                    serviceId: service?.serviceId,
                    goodsId: service?.goodsId,
                    goodsAmount: Number(item?.serviceValue) ? Number(item?.serviceValue) : 0,
                    serviceName: service?.serviceName,
                    serviceNum: service?.num,
                    subSelectList: service?.subSelectList || [],
                });
                return true; // 修改为 true,使其计算已选择数量
            }
            return false; // 当 num 不存在时返回 false
        }).length;

        if (serviceItem?.category === item.category) {
            item.serviceList.forEach((service) => {
                // 分类下服务种类数量上限 -1 未设置种类限制
                if (selectedCount >= item?.categoryLimit && item.categoryLimit !== -1) {
                    console.log(`${item.category} 达到上限`);
                    if (!service.num) {
                        service.categoryDisabled = true;
                    }
                } else {
                    service.categoryDisabled = false;
                }
            });

            // 某项服务可选数量上限
            item.serviceList.forEach((service) => {
                // orderLimit 
                if (service.num >= service.orderLimit) {
                    service.serviceDisabled = true;
                } else {
                    service.serviceDisabled = false;
                }
            });
        }
    });

    arrFilter.forEach((item) => {
        item.subSelectList.forEach((item1) => {
            item1.subNode[0].serviceName = 1; 
        });
    });

    console.log('初始化initData', initData);
    console.log(`'arrFilter`, arrFilter);
    setSelectedItemList(arrFilter);
}, [initData]);

修改点:

  1. 使用 unshift:将每个符合条件的对象使用 unshift 推送到 arrFilter 的开头。
  2. 逻辑改进:确保在筛选器中返回正确的布尔值,以便计算已选择的数量。

这样处理后,最终得到的 arrFilter 将是按倒序排列的。如果需要保持特定顺序,则还需要考虑其他因素(如原始数据顺序)。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20833

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?