2016-09-28 94 views
0

到目前爲止,我有這樣的代碼:返回true,如果JavaScript數組包含一個元素

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

如果一個元素是一個數組它會返回一個數大於或等於0,所以我可以說isMatch >=0但這似乎並不是最安全的方式。我還能如何從所需的代碼返回true/false?

+3

什麼是不安全的這件事?這就是函數的工作原理。 –

+0

這就是'.indexOf()'的定義行爲 - 返回值爲'-1'意味着數組中的值不是*,任何其他值都表示它是。 – Pointy

+0

你是最安全的方式是什麼意思?這會失敗嗎?你可以使用'.find'或'.includes'。 – Xufox

回答

1

因爲某種原因可能會爆炸,但爲什麼不呢!

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

很高興看到一個ES0答案:p(沒有爆炸) –

+0

也許'Array.prototype.findMatch = function(token) {...'? – Maxx

+0

@Maxx,聽起來不錯,請發表回覆 –

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. 
1

回答您可以只使用Array.prototype.some

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

它停止當它找到一個true

0

首先,我們要了解,什麼是存儲在viewedUserLikedUsersArray陣列。

如果有原語,沒關係,但是如果有對象我們不能使用indexOf數組的方法,因爲它裏面使用嚴格比較===,我們怎麼知道,與對象的比較是通過鏈接去進行的。

indexOf工作原理類似於迭代遍歷循環,唯一的方法。

在與對象的情況下,我們可以使用find數組的方法MDN Array.prototype.find()findIndexArray.prototype.findIndex();

此外,我們可以將用戶存儲在帶有userId鍵的hashMap中,並通過引用對象屬性來檢查匹配。

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

 
... 
 

 
var someUserId = '#124152342'; 
 

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

相關問題