Javascript 我怎样才能使这段代码更具反应性
我是个新手,我想学着写得更好。我试着用谷歌搜索这件事的答案,但似乎找不到任何有用的答案 我有一个项目列表,这些项目是具有id(不是数字,而是字符串)、名称和目标的对象。我想创建另一个新对象列表,其中也包含捐赠和minDonations值的总和。我从另一个列表中得到的那些Javascript 我怎样才能使这段代码更具反应性,javascript,reactjs,Javascript,Reactjs,我是个新手,我想学着写得更好。我试着用谷歌搜索这件事的答案,但似乎找不到任何有用的答案 我有一个项目列表,这些项目是具有id(不是数字,而是字符串)、名称和目标的对象。我想创建另一个新对象列表,其中也包含捐赠和minDonations值的总和。我从另一个列表中得到的那些“捐款”。这些列表是分开的,因为我从两个不同的api获取它们 我设法获得了我想要的信息,并从中创建了一个新的对象列表,但这看起来非常不真实,就像这样做的方式一样。我怎样才能使这个代码更好 我希望这是回答这类问题的合适地方 先谢谢你
“捐款”
。这些列表是分开的,因为我从两个不同的api
获取它们
我设法获得了我想要的信息,并从中创建了一个新的对象列表,但这看起来非常不真实,就像这样做的方式一样。我怎样才能使这个代码更好
我希望这是回答这类问题的合适地方
先谢谢你
useEffect(() => {
//use the data gathered to create new list of object containing
//the project and the amount invested/targeted to them and minDonations value
var helperProjectList = projects.map(p => {
const projectObject = {
id: p.id,
name: p.name,
target: p.target,
minDonations: 0,
sum: 0
}
return projectObject
})
for (var p = 0; p < helperProjectList.length; p++) {
for (var d = 0; d < donations.length; d++) {
if (donations[d].target == helperProjectList[p].id) {
helperProjectList[p].sum += donations[d].sum
helperProjectList[p].minDonations += donations[d].sum
}
}
}
//this cant be on the for loops above for it loops too many times.
var ut = 0;
for(var d = 0; d < donations.length; d++) {
if (donations[d].target === undefined) {
ut += donations[d].sum
}
}
setProjectDonations(helperProjectList)
setUnTargetedDonationsSum(ut)
}, [projects, donations])
useffect(()=>{
//使用收集的数据创建包含以下内容的对象的新列表
//该项目及其投资/目标金额和minDonations价值
var helperProjectList=projects.map(p=>{
常量项目对象={
id:p.id,
姓名:p.name,
目标:p.target,
意识:0,
总数:0
}
返回项目对象
})
对于(var p=0;p
我认为这可能会帮助您:
useEffect(() => {
//use the data gathered to create new list of object containing
//the project and the amount invested/targeted to them and minDonations value
var helperProjectList = projects.map((p) => {
const foundIndex = donations?.findIndex(donation => donation.target == p.id);
if(foundIndex !== -1){
return {
id: p.id,
name: p.name,
target: p.target,
minDonations: donations[foundIndex].minDonations + p.minDonations,
sum: donations[foundIndex].sum + p.sum,
};
}else {
return {
id: p.id,
name: p.name,
target: p.target,
minDonations: 0,
sum: 0,
};
}
});
var ut = 0;
for (var d = 0; d < donations.length; d++) {
if (donations[d].target === undefined) {
ut += donations[d].sum;
}
}
setProjectDonations(helperProjectList);
setUnTargetedDonationsSum(ut);
}, [projects, donations]);
useffect(()=>{
//使用收集的数据创建包含以下内容的对象的新列表
//该项目及其投资/目标金额和minDonations价值
var helperProjectList=projects.map((p)=>{
const foundIndex=捐赠?.findIndex(捐赠=>捐赠.target==p.id);
如果(foundIndex!=-1){
返回{
id:p.id,
姓名:p.name,
目标:p.target,
minDonations:捐赠[foundIndex]。minDonations+p.minDonations,
金额:捐款[foundIndex].sum+p.sum,
};
}否则{
返回{
id:p.id,
姓名:p.name,
目标:p.target,
意识:0,
总数:0,,
};
}
});
var-ut=0;
对于(var d=0;d<0.length;d++){
if(捐赠[d]。目标===未定义){
ut+=捐款[d]。总额;
}
}
设置项目捐赠(帮助项目列表);
SetUntargetedOnationsSum(ut);
},[项目、捐赠];
与我之前的代码相比,这是一个更好的代码,但它没有考虑到许多捐赠可能有相同的目标,这是我循环的主要原因