Returning true if JavaScript array contains an element

北城余情 提交于 2020-05-09 15:59:17

问题


So far I have this code:

var isMatch = viewedUserLikedUsersArray.indexOf(logged_in_user);
    if (isMatch >=0){
      console.log('is match');
    }
    else {
      console.log('no match');
    }

If an element is in an array it will return a number greater or equal to 0 and so I can say isMatch >=0 but this doesn't seem the safest way. How else can I return a true/false from the desired code?


回答1:


You could just use Array.prototype.some

var isMatch = viewedUserLikedUsersArray.some(function(user){
  return user === logged_in_user;
});

It stops when it finds a true value




回答2:


Probably going to get blasted for some reason but hey, why not!

function findMatch(arr, user) {
    var i = 0, count = arr.length, matchFound = false;

    for(; i < count; i++) {
        if (arr[i] === user) {
            matchFound = true;
            break;
        }
    }

    return matchFound;
}

 var isMatch = findMatch(viewedUserLikedUsersArray, logged_in_user); // etc.

An alternative could also be to use includes()

var isMatch = viewedUserLikedUsersArray.includes(logged_in_user); // returns true/false



回答3:


The One and Only ChemistryBlob answer with Array.prototype

Array.prototype.findMatch = function(token) {
    var i = 0, count = this.length, matchFound = false;

    for(; i < count; i++) {
        if (this[i] === token) {
            matchFound = true;
            break;
        }
    }

    return matchFound;
}

var isMatch = viewedUserLikedUsersArray.findMatch(logged_in_user); // etc.



回答4:


At first, we have to understand, what is stored in viewedUserLikedUsersArray array.

If there are primitives, it's ok, but if there are objects we can't use indexOf method of array, because it use strict comparison === inside, how we know, the comparison with object is going by link.

indexOf works similar to iterating through the loop, the only way.

In case with objects we can use find method of array MDN Array.prototype.find() or findIndex Array.prototype.findIndex();

Also we can store users in hashMap with userId keys, and check matching by referring to the object property.

var someUsers = {
  '#124152342': {
    ...
  },
  '#534524235': {
    ...
  },
  ...
};

...

var someUserId = '#124152342';

if (someUsers[someUserId]) {
  console.log('is match');
} else {
  console.log('no match');
}


来源:https://stackoverflow.com/questions/39750037/returning-true-if-javascript-array-contains-an-element

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!