2016-09-28 3 views
0

До сих пор у меня есть этот код:Возвращение верно, если массив 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' означает, что в массиве значение равно * not *, а любое другое значение означает, что оно есть. – 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.

Если есть примитивы, это нормально, но если есть объекты, мы не можем использовать метод array indexOf, потому что он использует строгое сравнение === внутри, как мы знаем, сравнение с объектом происходит по ссылке.

indexOf работает аналогично итерации по петле, единственный способ.

В случае с объектами мы можем использовать метод find метод массива MDN Array.prototype.find() или findIndexArray.prototype.findIndex();

Также мы можем хранить пользователей в hashMap с помощью ключей userId и проверять соответствие, ссылаясь на свойство объекта.

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

 
... 
 

 
var someUserId = '#124152342'; 
 

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

Смежные вопросы