如果JavaScript数组包含元素,则返回true

时间:2016-09-28 14:12:22

标签: javascript arrays boolean indexof

到目前为止,我有这段代码:

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

如果元素在数组中,它将返回一个大于或等于0的数字,所以我可以说isMatch >=0但这似乎不是最安全的方法。我怎样才能从所需的代码中返回true / false?

4 个答案:

答案 0 :(得分:2)

可能会因为某种原因而受到抨击,但是,嘿,为什么不呢!

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.

替代方案也可以是includes()

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

答案 1 :(得分:2)

您可以使用Array.prototype.some

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

当它找到true

时停止

答案 2 :(得分:1)

唯一的ChemistryBlob回答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.

答案 3 :(得分:0)

首先,我们必须了解viewedUserLikedUsersArray数组中存储的内容。

如果有原语,那没关系,但是如果有对象我们就不能使用indexOf数组方法,因为它在内部使用严格的比较===,我们怎么知道,与对象的比较正在通过链接。

indexOf的工作方式类似于迭代循环,唯一的方法。

如果是对象,我们可以使用数组MDN Array.prototype.find()find Array.prototype.findIndex()findIndex方法;

我们也可以使用userId键在hashMap中存储用户,并通过引用object属性来检查匹配。

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

...

var someUserId = '#124152342';

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