найти значение ключа дочернего свойства и вернуть родительский объект, если значение истинно LODASH - PullRequest
0 голосов
/ 04 мая 2018

Дайте эти данные. Я пытаюсь вернуть все data.objects, которые, где свойство canHaveCookie: true

data : {
    name1: {
        canHaveCookie: true,
        anotherProp : false
    },
    name2: {
        canHaveCookie: false,
        anotherProp : false
    },
    name3: {
        canHaveCookie: true,
        anotherProp : false
    }
}

Вот что я пробовал:

var dataAttrObj     = grandparent.data,
    tmpProcessObj   = [];

tmpProcessObj = _.pickBy(dataAttrObj, function(item) {
        console.log('item is', item);
        return _.includes(item, {canHaveCookie: true});
        // console.log('objs here',  _.has(item, {canStopProcessing: true}) );
        // return _.some(item, {canStopProcessing: true});
        // _.some(item, {canHaveCookie: true}));
        // return _.has(item, ['canHaveCookie', true]);
        return _.includes(item, {canHaveCookie: true});
    });

То, что я ожидаю получить, это

data : {
    name1: {
        canHaveCookie: true,
        anotherProp : false
    },
//notice name2 is not here because name2 canHaveCookie is false
    name3: {
        canHaveCookie: true,
        anotherProp : false
    }
}

У кого-нибудь есть предложения по использованию lodash?

1 Ответ

0 голосов
/ 04 мая 2018

Если вы используете pickBy() - это lodash, тогда вам просто нужно проверить в функции, если canHaveCookie имеет значение true. Первым параметром функции является текущее значение, поэтому вам просто нужно вернуть ключ canHaveCookie (так как он будет правдив, если он истинен).

Например:

_.pickBy(object, value => value.canHaveCookie)

Отрывок:

var obj = {
  data: {
    name1: {
      canHaveCookie: true,
      anotherProp : false
    },
    name2: {
      canHaveCookie: false,
      anotherProp : false
    },
    name3: {
      canHaveCookie: true,
      anotherProp : false
    }
  }
}

var result = _.pickBy(obj.data, value => value.canHaveCookie)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script>
...