Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果JavaScript数组包含元素,则返回true_Javascript_Arrays_Boolean_Indexof - Fatal编程技术网

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

如果JavaScript数组包含元素,则返回true,javascript,arrays,boolean,indexof,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,但这似乎不是最安全的方法。否则,

到目前为止,我有以下代码:

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

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

可能会因为某些原因而遭到抨击,但嘿,为什么不呢

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.

唯一使用
Array.prototype的ChemistryBlob答案

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.
Array.prototype.findMatch=函数(令牌){
var i=0,count=this.length,matchFound=false;
对于(;i
您可以使用


当它找到一个
true
值时,它就会停止。首先,我们必须了解
vieweduserlikeduserray
数组中存储了什么

如果有原语,这没关系,但是如果有对象,我们不能使用数组的
索引方法,因为它在内部使用严格的比较
==
,我们知道,与对象的比较是通过链接进行的

indexOf
的工作原理类似于循环迭代,这是唯一的方法

对于对象,我们可以使用数组的
find
方法或
findIndex

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

var someUsers={
'#124152342': {
...
},
'#534524235': {
...
},
...
};
...
var someUserId='#124152342';
if(someUsers[someUserId]){
log('is match');
}否则{
console.log(“不匹配”);

}
这有什么不安全之处?这就是函数的工作方式。这是
.indexOf()
的定义行为-返回值
-1
表示该值不在数组中,其他值表示它在数组中。最安全的方法是什么?这会在哪里失败?您可以使用
.find
includes
。将其包装在函数中,并返回布尔值而不是登录到控制台。还有一个ES2015替代方案。。。数组#包括可能
Array.prototype.findMatch=function(token){…
?这与
indexOf()有何不同?
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.
var isMatch = viewedUserLikedUsersArray.some(function(user){
  return user === logged_in_user;
});