如何在 javascript 中使用 "indexOf"
How to use "indexOf" in javascript
您好,我正在使用 Angular,我正在为一个问题而苦苦挣扎。
我想知道如何在具有两个或多个字段的数组上使用“indexOf()”方法。
这是我的代码:
我的阵列:
[
{
"id":1,
"name": "stuff",
"surname": "stuff"
},
{
"id":2,
"name": "stuff",
"surname": "stuff"
},
{
"id":3,
"name": "stuff",
"surname": "stuff"
}
]
在我的 angular 代码中,我希望用户从模板(在表单中)键入某个 ID,并检查相应的用户是否存在于我的数组中。
我的 angular 代码是:
<form #formValue="ngForm" (ngSubmit)="onClick(formValue)">
<div class="form-group">
<label for="exampleInputEmail1">Identifiant du challenge</label>
<input type="text" name="_id" #_id="ngModel" [(ngModel)]="this.user._id"
class="form-control" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$"
placeholder="identifiant">
</div>
<input type="submit" value="Submit" class="btn btn-primary"/>
</form>
在我的 *.ts 文件中,我有一个对名为“onClick”的提交事件执行的方法
查看我的 ts 文件:
onClick(form: NgForm){
this.getUsers(form.value._id)
}
// get users method
getUsers(id: String){
return this._http.get<any[]>(this.url + 'getAllChallenge').subscribe(
(users)=>{
this.users=users;
this.checkExist= this.users.indexOf(id)
if(this.checkExist==-1){
alert("this id you typed doesn't exist in our array")
}
else{
/* here is my issue. this alert if is always printed enven
If I type 1,2 or 3(an
existing id)*/
alert("this Id exist")
}
}
);
}
提前致谢!
基本上,你不会。
您要使用的函数是find()
。
你给它一个函数,它应该 return true 或 false 根据你想要的。然后它将 return 第一个匹配的元素,或者 undefined
如果没有元素匹配。所以,如果你得到一个匹配项,它就存在,否则就不存在。您不必显式转换为布尔值,但您可以。
this.checkExist = Boolean(this.users.find(user => user.id === id));
这也是一个 findIndex()
方法,如果您愿意,它 return 是索引而不是对象本身,但是如果您将它用作布尔值,则使用 find()
会更安全(因为您不必检查 !== -1
)。
indexOf
查找数组中元素的索引。例如:
[1,2,3].indexOf(1); // 0
但是如果你想搜索带有 属性 的元素(并在数组中找到 index)你可以使用 findIndex
:
this.users.findIndex(u => u.id === id);
如果您将对象传递给 getUsers() 函数,您实际上可以这样做。
我不知道在 Angular.
中是否可行
a={}
b={}
c=[a,b]
c.indexOf(b) // = 1
否则使用其他人建议的 find() 方法。
你应该使用findIndex()
var arr = [
{
"id":1,
"name": "stuff",
"surname": "stuff"
},
{
"id":2,
"name": "stuff",
"surname": "stuff"
},
{
"id":3,
"name": "stuff",
"surname": "stuff"
}
]
let index = arr.findIndex((obj) => {
return obj.id == 2
})
console.log(index)
您好,我正在使用 Angular,我正在为一个问题而苦苦挣扎。 我想知道如何在具有两个或多个字段的数组上使用“indexOf()”方法。 这是我的代码:
我的阵列:
[
{
"id":1,
"name": "stuff",
"surname": "stuff"
},
{
"id":2,
"name": "stuff",
"surname": "stuff"
},
{
"id":3,
"name": "stuff",
"surname": "stuff"
}
]
在我的 angular 代码中,我希望用户从模板(在表单中)键入某个 ID,并检查相应的用户是否存在于我的数组中。 我的 angular 代码是:
<form #formValue="ngForm" (ngSubmit)="onClick(formValue)">
<div class="form-group">
<label for="exampleInputEmail1">Identifiant du challenge</label>
<input type="text" name="_id" #_id="ngModel" [(ngModel)]="this.user._id"
class="form-control" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$"
placeholder="identifiant">
</div>
<input type="submit" value="Submit" class="btn btn-primary"/>
</form>
在我的 *.ts 文件中,我有一个对名为“onClick”的提交事件执行的方法 查看我的 ts 文件:
onClick(form: NgForm){
this.getUsers(form.value._id)
}
// get users method
getUsers(id: String){
return this._http.get<any[]>(this.url + 'getAllChallenge').subscribe(
(users)=>{
this.users=users;
this.checkExist= this.users.indexOf(id)
if(this.checkExist==-1){
alert("this id you typed doesn't exist in our array")
}
else{
/* here is my issue. this alert if is always printed enven
If I type 1,2 or 3(an
existing id)*/
alert("this Id exist")
}
}
);
}
提前致谢!
基本上,你不会。
您要使用的函数是find()
。
你给它一个函数,它应该 return true 或 false 根据你想要的。然后它将 return 第一个匹配的元素,或者 undefined
如果没有元素匹配。所以,如果你得到一个匹配项,它就存在,否则就不存在。您不必显式转换为布尔值,但您可以。
this.checkExist = Boolean(this.users.find(user => user.id === id));
这也是一个 findIndex()
方法,如果您愿意,它 return 是索引而不是对象本身,但是如果您将它用作布尔值,则使用 find()
会更安全(因为您不必检查 !== -1
)。
indexOf
查找数组中元素的索引。例如:
[1,2,3].indexOf(1); // 0
但是如果你想搜索带有 属性 的元素(并在数组中找到 index)你可以使用 findIndex
:
this.users.findIndex(u => u.id === id);
如果您将对象传递给 getUsers() 函数,您实际上可以这样做。 我不知道在 Angular.
中是否可行a={}
b={}
c=[a,b]
c.indexOf(b) // = 1
否则使用其他人建议的 find() 方法。
你应该使用findIndex()
var arr = [
{
"id":1,
"name": "stuff",
"surname": "stuff"
},
{
"id":2,
"name": "stuff",
"surname": "stuff"
},
{
"id":3,
"name": "stuff",
"surname": "stuff"
}
]
let index = arr.findIndex((obj) => {
return obj.id == 2
})
console.log(index)