我正在开发一个有角度的项目。 我有一个表文件,如果要正确,我想将每个元素与一个数据值进行比较,我会做声明,否则我会做另一次比较,但是我的问题是,即使数据是正确的,它也总是会获取所有表,并且应该在其他很短的时间。 请如何避免这种情况。
这是我的代码:
if (this.data) {
this.imgNotFoundText = '';
this.data.package.files.forEach(element => {
i++;
this.picture = '';
if (element.name == this.data.properties.Name) {
this.picture = 'picOne.png'
}
if (i == this.data.package.files.length && this.picture == '') {
this.picture = './../assets/img/notFound.jpg'
}
});
}
答案 0 :(得分:5)
我看到了两个可能的问题:
似乎怀疑总是在循环中无条件执行this.picture = '';
。如果要执行此操作,则最好只查看数组中的最后一个条目。您可能想将其移到forEach
调用之前 。
您已经引用了else
,但是您的代码中没有else
。您连续有两个if
,但是第一个if
的结果对第二个{根本没有任何影响。您可能想要else if
。然后,如果第一个if
中的条件为true,则不执行第二个if
。
因此,如果这两个猜测都正确:
if (this.data) {
this.imgNotFoundText = '';
this.picture = '';
this.data.package.files.forEach(element => {
i++;
if (element.name == this.data.properties.Name) {
this.picture = 'picOne.png'
} else if (i == this.data.package.files.length && this.picture == '') {
this.picture = './../assets/img/notFound.jpg'
}
});
}
旁注:您尚未显示i
的初始化方式,但是如果用于跟踪forEach
当前条目的索引,则无需:forEach
会收到作为第二个参数:
if (this.data) {
this.imgNotFoundText = '';
this.picture = '';
this.data.package.files.forEach((element, index) => {
// -----------------------------^^^^^^^^^^^^^^^^
if (element.name == this.data.properties.Name) {
this.picture = 'picOne.png'
} else if (index == this.data.package.files.length && this.picture == '') {
// ------------^^^^^
this.picture = './../assets/img/notFound.jpg'
}
});
}
您还可能希望完全避免使用第二个if
,只需在循环之前指定默认值“ not found”即可。
if (this.data) {
this.imgNotFoundText = '';
const {files} = this.data.package;
this.picture = files.length ? './../assets/img/notFound.jpg' : '';
files.forEach(element => {
if (element.name == this.data.properties.Name) {
this.picture = 'picOne.png'
}
});
}
我假设this.picture
中没有条目时,''
应该是files
,如果至少有一个条目,则应该是“未找到”图像。如果找到匹配项,循环将覆盖它。
从那里继续,除非files
中可以有多个具有相同name
的条目,否则您可能要在第一个匹配项之前停止。所以:
if (this.data) {
this.imgNotFoundText = '';
const {files} = this.data.package;
this.picture = files.length ? './../assets/img/notFound.jpg' : '';
for (const {name} of files) {
if (name == this.data.properties.Name) {
this.picture = 'picOne.png'
break;
}
}
}
答案 1 :(得分:0)
不确定您的目标是什么,但是您只是遍历列表并每次设置图片值,这意味着您将获得最后一个元素的图片值。
如果您的目标是为没有文件的元素显示“未找到”图片,则需要具有一组反映文件数组的图片(或向每个文件添加属性图片)。 / p>
答案 2 :(得分:0)
看起来您可以使用Array.prototype.some
if (this.data) {
this.imgNotFoundText = '';
this.picture = this.data.package.files.some(
(element) => element.name === this.data.properties.Name
) ? 'picOne.png' : './../assets/img/notFound.jpg'
}
如果data.package.files中的任何项目具有与this.data.properties.Name相同的名称,它将返回picOne.png
notFound.jpg
尽管可以