Jquery 在JSON对象数组中查找具有某些值的项并替换(如果存在)
我有一个这样的数组,它当然是动态的,当单击几个表单字段旁边的add按钮时,每个元素都会被按下Jquery 在JSON对象数组中查找具有某些值的项并替换(如果存在),jquery,angular,Jquery,Angular,我有一个这样的数组,它当然是动态的,当单击几个表单字段旁边的add按钮时,每个元素都会被按下 [{"EbudgetId":0,"CrId":0,"TypeId":"8","TypeName":"AUGMENT_STAFF","Year":2020,"Cost":456}, {"EbudgetId":0,"Cr
[{"EbudgetId":0,"CrId":0,"TypeId":"8","TypeName":"AUGMENT_STAFF","Year":2020,"Cost":456},
{"EbudgetId":0,"CrId":0,"TypeId":"8","TypeName":"AUGMENT_STAFF","Year":2020,"Cost":456},
{"EbudgetId":0,"CrId":0,"TypeId":"8","TypeName":"AUGMENT_STAFF","Year":2020,"Cost":456},
{"EbudgetId":0,"CrId":0,"TypeId":"8","TypeName":"AUGMENT_STAFF","Year":2021,"Cost":657}]
我的要求是,如果某个特定类型和年份的项目已经存在,那么它应该添加其值,而不是将其放入数组中
出于这个目的,我确实喜欢这个,但它不起作用
addExternalBudget() {
let typeId:Number = this.selectedExternalBudget.TypeId;
let yr:number=this.selectedExternalBudget.Year;
if(typeId==0 || yr==0) return false;
let ebCopy: ExternalBudget = Object.assign({}, this.selectedExternalBudget);
let existingBudget:ExternalBudget=this.myChangeRequest.NewExternalBudget.find(x=>{x.TypeId===typeId;x.Year==yr});
if(existingBudget=== undefined){
this.myChangeRequest.NewExternalBudget.push(ebCopy);
}
else
{
existingBudget.Cost=this.selectedExternalBudget.Cost+existingBudget.Cost;
}
}
在这里,即使该项已经存在且具有给定的typeid和year,它也会作为新项添加到数组中
我做错了什么
我在Angular 9中工作,下面是函数
addExternalBudget
的样子。您的find
方法不正确,内部表达式不应使用大括号。如果它有大括号,则必须显式返回值-
addExternalBudget() {
let typeId:Number = this.selectedExternalBudget.TypeId;
let yr:number=this.selectedExternalBudget.Year;
if(typeId==0 || yr==0) return false;
let ebCopy: ExternalBudget = Object.assign({}, this.selectedExternalBudget);
let existingBudget:ExternalBudget=this.myChangeRequest.NewExternalBudget.find(x=> x.TypeId===typeId && x.Year==yr);
if(!existingBudget){
this.myChangeRequest.NewExternalBudget.push(ebCopy);
}
else
{
existingBudget.Cost=this.selectedExternalBudget.Cost+existingBudget.Cost;
}
}
下面是函数
addExternalBudget
的外观。您的find
方法不正确,内部表达式不应使用大括号。如果它有大括号,则必须显式返回值-
addExternalBudget() {
let typeId:Number = this.selectedExternalBudget.TypeId;
let yr:number=this.selectedExternalBudget.Year;
if(typeId==0 || yr==0) return false;
let ebCopy: ExternalBudget = Object.assign({}, this.selectedExternalBudget);
let existingBudget:ExternalBudget=this.myChangeRequest.NewExternalBudget.find(x=> x.TypeId===typeId && x.Year==yr);
if(!existingBudget){
this.myChangeRequest.NewExternalBudget.push(ebCopy);
}
else
{
existingBudget.Cost=this.selectedExternalBudget.Cost+existingBudget.Cost;
}
}
问题在于你的发现。您可以像这样使用
filter
来获取匹配的项目:
let foundItems=this.myChangeRequest.NewExternalBudget.filter(=>(u.TypeId==TypeId&&uId.Year==yr))
所以,这里你得到一个匹配对象的
数组
,如果它的长度>0
你就得到了一些答案。因此,继续处理foundItems
问题在于您的发现。您可以像这样使用filter
来获取匹配的项目:
let foundItems=this.myChangeRequest.NewExternalBudget.filter(=>(u.TypeId==TypeId&&uId.Year==yr))
所以,这里你得到一个匹配对象的数组
,如果它的长度>0
你就得到了一些答案。因此,继续处理foundItems