我需要知道是否可以在多维数组上使用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上会打开多个选项卡。
答案 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
它需要一个返回布尔值的回调,即false
或var d = [1,2,3,4,5];
var valid = d.every(function(num){ return !isNaN(num); });
console.log(valid)
(默认值)。
虽然两者都可以以类似的方式使用,但它们应该以一种传达正确含义的方式使用。
.some
以上代码表示“如果所有元素都是数字则有效”。您可以使用{{1}},但之后会将含义更改为“无效,如果有人不是数字”。您应该根据当前代码上下文使用它们以提高可读性。