Javascript 在Angular 6应用程序中,array.find函数不';在数组中找不到现有元素
我的Angular 6应用程序有一个问题,现在真的找不到答案,所以如果可以,请帮助我。非常感谢。接下来的问题是: 我有一个包含以下内容的数组(userDocuments):Javascript 在Angular 6应用程序中,array.find函数不';在数组中找不到现有元素,javascript,arrays,angular,Javascript,Arrays,Angular,我的Angular 6应用程序有一个问题,现在真的找不到答案,所以如果可以,请帮助我。非常感谢。接下来的问题是: 我有一个包含以下内容的数组(userDocuments): [{"DocumentId":1,"DocumentName":"Osobna iskaznica","Mark":"13994000"},{"DocumentId":2,"DocumentName":"Putovnica","Mark":"qprtobm777"}]. 正在从此阵列填充下拉列表。下拉列表旁边是用于编辑对话
[{"DocumentId":1,"DocumentName":"Osobna iskaznica","Mark":"13994000"},{"DocumentId":2,"DocumentName":"Putovnica","Mark":"qprtobm777"}].
正在从此阵列填充下拉列表。下拉列表旁边是用于编辑对话框中选定元素内容的按钮
<select id="select-document" class="form-control" [(ngModel)]="selectedDocumentId">
<option *ngFor="let document of userDocuments" [value]="document.DocumentId">
{{ document.DocumentName }} ({{ document.Mark }})</option>
</select>
<button class="btn btn-danger btn-40 ml-1" type="button" (click)="openDocumentDailog(true)"> <i class="fa fa-edit"></i></button>
对于变量currentDoc,我得到了在第二次搜索中未定义的错误。如您所见,我正在记录值。以下是结果:
array: [{"DocumentId":1,"DocumentName":"Osobna iskaznica","Mark":"13994000"},{"DocumentId":2,"DocumentName":"Putovnica","Mark":"qprtobm777"}]
文件编号:1
Object { DocumentId: 1, DocumentName: "Osobna iskaznica", Mark: "13994000" }
array: [{"DocumentId":1,"DocumentName":"Osobna iskaznica","Mark":"13994000"},{"DocumentId":2,"DocumentName":"Putovnica","Mark":"qprtobm777"}]
文件编号:2
undefined
在代码中,对我来说一切看起来都是正确的,因为documentId值(1或2)出现在一个数组元素中。我还需要说,当我从下拉列表中选择返回第一个值时,也会收到未定义元素的错误消息。第一次编辑后,由于array.find方法的原因,下一次编辑不再有效
我是遗漏了什么,还是问题更深了?多谢各位
Zeljko您使用的是严格比较(例如,===),只有在操作数类型相同且内容匹配时才是真的。内容(DocumentId和this.selectedDocumentId)匹配,但操作数的类型不同。尝试使用
=
而不是==
,它似乎找不到您的文档,因为:
const currentDoc = this.userDocuments.find(x => x.DocumentId == this.selectedDocumentId);
相比之下,我们需要记住,
=
检查值和类型。在json中,id的类型为number
,但在模板中,您使用的是默认为字符串的value
。如果要将id保留为号码
,则需要使用[ngValue]
:
<select id="select-document" class="form-control" [(ngModel)]="selectedDocumentId">
<option *ngFor="let document of userDocuments" [ngValue]="document.DocumentId">
// ...
</option>
</select>
// ...
是否已初始化
selectedDocumentId
您可以执行以下操作:
// the dropdown will select the first item by default
constructor() {
this.selectedDocumentId = this.userDocuments[1].DocumentId;
}
第二:
const currentDoc=this.userDocuments.find(x=>x.DocumentId==this.selectedDocumentId)代码>
x.DocumentId
是一个int
但是这个。selectedDocumentId
是一个字符串,您可以将int
与字符串
与==
进行比较
解决方案:
您可以执行{“DocumentId”:“1”(字符串),“DocumentName”:“Osobna iskaznica”,“Mark”:“13994000”}
或者做x.DocumentId==parseInt(this.selectedDocumentId,10)
来解决这个问题。在头痛了两天之后,在发布案例之后,我发现问题出在…find(x=>x.DocumentId==this.selectedDocumentId),但不确定原因。在typescript中,selectedDocumentId被指定为一个数字(与下拉列表ngModel关联的变量),因此在比较值时,所有内容看起来都是正确的。以防万一,我在这之前加了加号(+)。选择了DocumentId,用于铸造数字和立即查看应用程序。不知道为什么。知道吗?不,我不知道。我现在尝试使用一些selectedDocumentId初始值,但不强制转换为数字仍然不起作用。是的,当数组充满数据时就是这样。如下面的回答所述,我将代码从value改为ngValue,以保持变量为数字,现在一切正常。谢谢。是的,就是这样。我改成了ngValue。谢谢你100倍!:)
// the dropdown will select the first item by default
constructor() {
this.selectedDocumentId = this.userDocuments[1].DocumentId;
}