Как использовать метод _.where из библиотеки underscore.js для более сложного поиска

javascript underscore.js

19070 просмотра

1 ответ

1710 Репутация автора

var a = {
    "title": "Test 1",
    "likes": {
        "id": 1
    }
}

var b = {
    "title": "Test 2",
    "likes": {
        "id": 2
    }
}


var c = [a, b];

var d = _.where(c, {
    "title": "Test 2",
    "likes": {
        "id": 2
    }
});
//d => outputs an empty array []

В этой ситуации я ожидал бы получить ссылку на объект в памяти, но d, но на самом деле он работает только с корневыми свойствами.

_.where(c, {title: "Test 2"});
=> outputs [object]

где объект является ссылкой для c [1];

РЕДАКТИРОВАТЬ: нашел возможное решение с помощью _.filter ()

_.filter( c, function(item){ 
    if (item.title == "Test 1" && item.likes.id == 1){
        return item;
    } 
})

outputs => [object] with reference for variable a
Автор: Lothre1 Источник Размещён: 02.01.2014 05:45

Ответы (1)


12 плюса

367075 Репутация автора

Решение

_.filterэто правильный способ сделать это, _.whereпросто _.filterярлык для фильтрации простых пар ключ / значение. Вы можете увидеть это из источника :

// Convenience version of a common use case of `filter`: selecting only objects
// containing specific `key:value` pairs.
_.where = function(obj, attrs, first) {
  if (_.isEmpty(attrs)) return first ? void 0 : [];
  return _[first ? 'find' : 'filter'](obj, function(value) {
    for (var key in attrs) {
      if (attrs[key] !== value[key]) return false;
    }
    return true;
  });
};

Документы могут быть немного более четкими, но, по крайней мере, комментарий в источнике понятен.

Автор: mu is too short Размещён: 02.01.2014 06:19
Вопросы из категории :
32x32