Возвращает ключ объекта, только если значение true

Как вернуть имя ключа объекта, только если его значение равно true?

Я использую подчеркивание, и единственное, что я вижу, это как вернуть ключи, что легко, я хочу избежать избыточных итераций как можно больше:

пример:

Object {1001: true, 1002: false} 

Мне нужен массив только со 1001 в нем...

4 ответов


получает ключи от объекта, то вы можете фильтр ключи, основанные на значениях

var obj = {1001: true, 1002: false};

var keys = Object.keys(obj);

var filtered = keys.filter(function(key) {
    return obj[key]
});

скрипка


есть еще одна альтернатива, которую можно использовать с Лодашь библиотека с использованием двух методов:

  • _.pickBy - Он создает объект состоит из свойств объекта. Если нет дополнительного параметра (предиката), то все возвращаемые свойства будут иметь истина значения.
  • _.keys(object) - создает массив ключей из данного объекта

так что в вашем примере это будет быть:

var obj = {1001: true, 1002: false};
var keys = _.keys(_.pickBy(obj));

// keys variable is ["1001"]

используя подчеркивания.js библиотека, это было бы очень похоже. Вам нужно использовать _.pick и _.keys функции. Разница только в том, что _.pick необходимо иметь функцию предиката, которая является _.identity.

таким образом, код будет следующим:

var obj = {1001: true, 1002: false};
var keys = _.keys(_.pick(obj, _.identity));

// keys variable is ["1001"]

Я надеюсь, что поможет


Если вы пытаетесь объединить фильтрацию и итерацию над объектом, который вы обычно после _.reduce (итератор швейцарского армейского ножа):

var trues = _(obj).reduce(function(trues, v, k) {
    if(v === true)
        trues.push(k);
    return trues;
}, [ ]);

демо:http://jsfiddle.net/ambiguous/2et6T/


менее многословен:

return array.filter(item => {
    return item.enabled === true;
});