Подчеркивание содержит (_.contains) по типам объектов
Я только начинаю с Javascript и использую библиотеку подделок. Я вижу, что у них есть всякая функция полезности, например _.contains. Есть ли способ сделать эту работу над объектами?
var indexes = [ {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'}, {'id': 9, 'name': 'nick'}, {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'} ];
if (_.contains(indexes, {'id':1, 'name': 'jake'})) {
console.log("contains");
}
Большинство примеров, которые они показывают, имеют простые массивы со строками или номерами в них. Мне было интересно, что я могу сделать, чтобы использовать их служебные функции, такие как _.contains для объектов. Спасибо.
Ответы
Ответ 1
contains
требует, чтобы значения были сопоставимы с ===
, которые не будут работать с разными экземплярами объектов.
Например, это сработает, если вы передадите точный объект, который вы ищете, что не очень полезно.
if (_.contains(indexes, indexes[0])) {
Однако вы можете использовать where
или findWhere
.
if (_.findWhere(indexes, {'id':1, 'name': 'jake'})) {
findWhere
является новым в Underscore 1.4.4
, поэтому, если у вас его нет, вы можете использовать where
.
if (_.where(indexes, {'id':1, 'name': 'jake'}).length > 0) {
Ответ 2
Вы действительно хотели бы использовать _. где для этого.
var indexes = [ {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'}, {'id': 9, 'name': 'nick'}, {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'} ];
if (_.where(indexes, {'id':1, 'name': 'jake'}).length) {
console.log("contains");
}