Javascript 筛选数组值-return语句不结束函数
我一直在绞尽脑汁做一些我认为很容易的事情,但我似乎无法解决 我有一个数组,它有不同类型的文本,没有排序 因此,我只想根据我基于文本类型的优先级来可视化其中的一个 以下是数据示例: 因此,我从模板触发一个函数:Javascript 筛选数组值-return语句不结束函数,javascript,arrays,angular,Javascript,Arrays,Angular,我一直在绞尽脑汁做一些我认为很容易的事情,但我似乎无法解决 我有一个数组,它有不同类型的文本,没有排序 因此,我只想根据我基于文本类型的优先级来可视化其中的一个 以下是数据示例: 因此,我从模板触发一个函数: <ng-container *ngFor="let text of elements.Event.Texts"> <p *ngIf="textSelector(text)">{{bestText}}</p> </ng-container>
<ng-container *ngFor="let text of elements.Event.Texts">
<p *ngIf="textSelector(text)">{{bestText}}</p>
</ng-container>
我只需要导出一个文本-按“文本类型”优先级
在我的例子中,以截图为例,我得到了“短”和“极短”文本
有人能告诉我我做错了什么吗?我将非常感激
致以最良好的祝愿 试试这个。这可能有用
textSelector(item: any) {
if (item.Type === 'VeryShort') {
this.bestText = item.Value;
return true;
} else if (item.Type === 'Short') {
this.bestText = item.Value;
return true;
} else if (item.Type === 'Medium') {
this.bestText = item.Value;
return true;
} else {
return false;
}
}
理解模板代码的作用很重要:它迭代
元素.Event.text
并调用textSelector
以每个元素。每当textSelector
返回true时,就会创建一个p
元素
我建议采用不同的方法。只调用函数一次,因为您只需要一个值
<p *ngIf="textSelector(elements.Event.Texts)">{{bestText}}</p>
{{{bestText}
这就是我编写函数的方式。我会使用一个数组来设置优先级,这样它更易于维护
const order = ["VeryShort", "Short", "Medium"];
textSelector(items: any[]) {
let bestItem;
for (const item of items) {
if (item.Type === order[0]) {
this.bestText = item.Value;
return true;
}
if (!bestItem) {
bestItem = item;
} else if (order.indexOf(item.Type) < order.indexOf(bestItem.Type)) {
bestItem = item;
}
}
if (!bestItem) {
return false;
}
this.bestText = bestItem.Value;
return true;
}
const order=[“极短”、“短”、“中”];
文本选择器(项目:任意[]){
让最好的项目;
用于(项目的常数项){
如果(item.Type==订单[0]){
this.bestText=item.Value;
返回true;
}
如果(!bestItem){
最佳项目=项目;
}else if(order.indexOf(item.Type)
如果您有任何问题或需要解释,请告诉我。非常感谢您,lovre!!这工作做得很好!同时也非常感谢你的详细回答——它帮助我弄清楚了我做错了什么,以及为什么我没能尽快找到答案。祝你一切顺利!!非常感谢你的建议!Lovre给出了一个很好的答案,解决了我的问题。再次感谢!
const order = ["VeryShort", "Short", "Medium"];
textSelector(items: any[]) {
let bestItem;
for (const item of items) {
if (item.Type === order[0]) {
this.bestText = item.Value;
return true;
}
if (!bestItem) {
bestItem = item;
} else if (order.indexOf(item.Type) < order.indexOf(bestItem.Type)) {
bestItem = item;
}
}
if (!bestItem) {
return false;
}
this.bestText = bestItem.Value;
return true;
}