【问题标题】:Lodash retrieve index of the items from array of objects that have a boolean property equal to trueLodash 从布尔属性等于 true 的对象数组中检索项目的索引
【发布时间】:2018-09-24 10:19:47
【问题描述】:

我是 lodash 的初学者,我从 c# 开始,有时我使用过 LINQ,我了解到 lodash 可用于查询 linq 样式,但尽管我尝试过,但无法从数组中获取项目的索引在 lodash 中具有布尔属性等于 true 的对象的数量。 谁能帮帮我?

我的第一次尝试:

var indexofItemns =_.find( arrayOfItems, (item) => 
  (item.booleanProperty === true));

但是,我有一个数组,我有:

var indexItems: number[] = [];
indexItems= _.times(
  arrayOfItems.length,
  _.find( arrayOfItems, (item) => (item.booleanProperty === true)); 

第二行也不编译。

谢谢

【问题讨论】:

    标签: javascript typescript lodash


    【解决方案1】:

    您可以使用纯 JS 实现相同的目标。 你不需要lodash

    const data = [{
        booleanProperty: false
      },
      {
        booleanProperty: true
      },
      {
        booleanProperty: false
      },
      {
        booleanProperty: true
      },
      {
        booleanProperty: false
      }
    ];
    
    const indexItems = data.map((item, index) => item.booleanProperty === true ? index : null).filter((item) => item !== null);
    
    
    console.log(indexItems)

    【讨论】:

    • 你打败了我,你的答案和我的基本一样,所以我删除了它
    【解决方案2】:

    如果您需要满足该条件的单个索引,您可以使用findIndex of es6lodash

    data.findIndex(a=>a.booleanProperty)
    

    如果您需要满足条件的所有索引,您可以将mapfilter 依次组合在一起(如ben's answer 所示),或者您可以将它们合并到单个reduce 以仅迭代一次并构建你的索引数组。我们开始:

    data.reduce((r, a, i)=> (a.booleanProperty && r.push(i), r), [])
    

    let data = [{"booleanProperty":false},{"booleanProperty":true},{"booleanProperty":false},{"booleanProperty":true},{"booleanProperty":false}];
        
    let indexes = data.reduce((r, a, i)=> (a.booleanProperty && r.push(i), r), []);
      
      
    console.log(indexes);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-03
      • 2011-05-01
      • 2012-04-12
      • 1970-01-01
      • 2017-12-30
      • 1970-01-01
      • 2021-09-07
      • 2014-01-30
      相关资源
      最近更新 更多