Подтвердить что ты не робот

Подчеркивание содержит (_.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 для объектов. Спасибо.

4b9b3361

Ответ 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");
}