Возвращает ключ объекта, только если значение 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;
}, [ ]);