JS - 在对象数组上使用 .every 方法

Fai*_*jaz 5 javascript arrays typescript

我需要知道是否可以在多维数组上使用 array.every 方法。

我的数组如下所示:

tabs=[
{label: string, icon: icon, routerLink: link},
{label: string, icon: icon, routerLink: link},
{label: string, icon: icon, routerLink: link}]
Run Code Online (Sandbox Code Playgroud)

我需要知道选项卡内的每个标签是否不等于特定标签。如果您能提供详细的答案,我将非常感激,因为我是一名新手程序员,想了解我在做什么!但无论如何请随意回答。:) 到目前为止谢谢!

编辑:我正在使用此方法将选项卡添加到我的选项卡菜单(ng2,primeng):

tabs=[
{label: string, icon: icon, routerLink: link},
{label: string, icon: icon, routerLink: link},
{label: string, icon: icon, routerLink: link}]
Run Code Online (Sandbox Code Playgroud)

TABS 是 primeng 提供的 MenuItem[] 类型,而 tab 是任何类型。

每次我双击图表时,都会调用该图表,并将一个新选项卡推入我的菜单中。现在我想检查带有特定标签的选项卡是否已经打开,以便它不会再次打开。我尝试将 for 循环与 if 结合使用

addTab(id: string) {
  if (id === 'linechart') {
    this.tab = {
      label: 'NW-Details',
      icon: 'fa-area-chart',
      routerLink: ['/nwdetails']
    }
    TABS.push(this.tab);
  }
  if (id === 'piechart') {
    this.tab = {
      label: 'IO-Details',
      icon: 'fa-pencil',
      routerLink: ['/iodetails']
    }
    TABS.push(this.tab)
  }
}
Run Code Online (Sandbox Code Playgroud)

但这会在每次不相等时打开一个新选项卡,因此,如果已经打开了更多选项卡,则实际上会在 dblclick 上打开多个选项卡。

Pra*_*lan 6

可以用Array#every方法。

tabls.every(function(v){
  return v.label !== someValue
})
Run Code Online (Sandbox Code Playgroud)

检查MDN 文档

every 方法对数组中存在的每个元素执行一次提供的回调函数,直到找到回调返回 false 值(转换为布尔值时变为 false 的值)的元素。如果找到这样的元素,则 every 方法立即返回 false。否则,如果回调为所有元素返回 true 值,则 every 将返回 true。仅对已分配值的数组索引调用回调;对于已被删除或从未被赋值的索引,不会调用它。


或使用Array#some方法

!tabls.some(function(v){
  return v.label === someValue
})
Run Code Online (Sandbox Code Playgroud)

检查MDN 文档

some() 对数组中存在的每个元素执行一次回调函数,直到找到回调返回 true 值(转换为布尔值时变为 true 的值)的元素。如果找到这样的元素,some() 立即返回 true。否则,some() 返回 false。仅对已分配值的数组索引调用回调;对于已被删除或从未被赋值的索引,不会调用它。