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

时间:2016-06-22 08:09:31

标签: javascript arrays typescript

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

我的数组看起来像这样:

tabs=[
{label: string, icon: icon, routerLink: link},
{label: string, icon: icon, routerLink: link},
{label: string, icon: icon, routerLink: link}]

我需要知道标签内的每个LABEL是否与特定标签不相等。 我真的很感激,如果你能提供一个详细的答案,因为我是一个新手程序员,想要了解我在做什么!但无论如何,请随时回答。 :) 谢谢到目前为止!

编辑:我正在使用此方法将Tabs添加到我的Tabmenu(ng2,primeng):

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

TABS是由primeng提供的MenuItem []类型,tab是any。

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

for (i = 0; i < TABS.length; i++) {
  if (TABS[i].label !== 'NW-Details') {
    this.tab = {
      label: 'NW - Details',
      icon: 'fa - area - chart'
      TABS.push(this.tab)
    }
  }

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

2 个答案:

答案 0 :(得分:1)

您可以使用 Array#every 方法。

tabls.every(function(v){
  return v.label !== someValue
})

检查 MDN docs

  

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

<小时/>   或使用 Array#some 方法

!tabls.some(function(v){
  return v.label === someValue
})

检查 MDN docs

  

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

答案 1 :(得分:0)

数组函数的签名是这样的:

true

它需要一个返回布尔值的回调,即falsevar d = [1,2,3,4,5]; var valid = d.every(function(num){ return !isNaN(num); }); console.log(valid)(默认值)。

每个vs一些

虽然两者都可以以类似的方式使用,但它们应该以一种传达正确含义的方式使用。

.some

以上代码表示“如果所有元素都是数字则有效”。您可以使用{{1}},但之后会将含义更改为“无效,如果有人不是数字”。您应该根据当前代码上下文使用它们以提高可读性。

参考

相关问题