如何在 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)