Javascript 我怎样才能使这段代码更具反应性

Javascript 我怎样才能使这段代码更具反应性,javascript,reactjs,Javascript,Reactjs,我是个新手,我想学着写得更好。我试着用谷歌搜索这件事的答案,但似乎找不到任何有用的答案 我有一个项目列表,这些项目是具有id(不是数字,而是字符串)、名称和目标的对象。我想创建另一个新对象列表,其中也包含捐赠和minDonations值的总和。我从另一个列表中得到的那些“捐款”。这些列表是分开的,因为我从两个不同的api获取它们 我设法获得了我想要的信息,并从中创建了一个新的对象列表,但这看起来非常不真实,就像这样做的方式一样。我怎样才能使这个代码更好 我希望这是回答这类问题的合适地方 先谢谢你

我是个新手,我想学着写得更好。我试着用谷歌搜索这件事的答案,但似乎找不到任何有用的答案

我有一个项目列表,这些项目是具有id(不是数字,而是字符串)、名称和目标的对象。我想创建另一个新对象列表,其中也包含捐赠和minDonations值的总和。我从另一个列表中得到的那些
“捐款”
。这些列表是分开的,因为我从两个不同的
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);
},[项目、捐赠];

与我之前的代码相比,这是一个更好的代码,但它没有考虑到许多捐赠可能有相同的目标,这是我循环的主要原因