要按照倒序将元素推入 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]);
修改点:
- 使用
unshift
:将每个符合条件的对象使用unshift
推送到arrFilter
的开头。 - 逻辑改进:确保在筛选器中返回正确的布尔值,以便计算已选择的数量。
这样处理后,最终得到的 arrFilter
将是按倒序排列的。如果需要保持特定顺序,则还需要考虑其他因素(如原始数据顺序)。
内容由零声教学AI助手提供,问题来源于学员提问