Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 筛选数组值-return语句不结束函数_Javascript_Arrays_Angular - Fatal编程技术网

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;
}