【问题标题】:find child property key value and return parent object if value is true LODASH如果值为真,则查找子属性键值并返回父对象 LODASH
【发布时间】:2025-12-23 02:10:11
【问题描述】:

给出这个数据。 我正在尝试返回属性 canHaveCookie 的所有 data.objects :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 有什么建议吗?

【问题讨论】:

  • Object.keys + Array.prototype.reduce 做你需要的事情(:

标签: javascript arrays object lodash


【解决方案1】:

如果你使用pickBy()是lodash,那么你只需要检查函数如果canHaveCookie是真的。函数的第一个参数是当前值,所以你只需要返回它的 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>

【讨论】:

  • 谢谢!所以返回 value.canHaveCookie; ...是否应该选择它是否返回真实?
  • 仅供参考——如果你不能使用 ES6,var result = _.pickBy(obj.datj, function(value) {return value.canHaveCookie; });