【问题标题】:Using Lodash to Compare an Object Array and Integer Array使用 Lodash 比较对象数组和整数数组
【发布时间】:2017-01-22 17:50:06
【问题描述】:

我有 2 条数据需要比较:

人:

[
 {id:1, name:"Bill"},
 {id:2, name:"Sally"},
 {id:3, name:"Steve"},
 {id:4, name:"Rick"}
]

选择:

[1,2,9,5]

我知道以下内容可以帮助我过滤具有所选数组值的人员对象列表:

_(People).indexBy('id').at(chosen).value();

但是可以反过来吗?我可以过滤Chosen 数组以仅包含来自People 的ID吗?

【问题讨论】:

    标签: javascript arrays object filter lodash


    【解决方案1】:

    首先,将 ID 存储在哈希中。然后,过滤选择是微不足道的

    var hash = [
      {id:1, name:"Bill"},
      {id:2, name:"Sally"},
      {id:3, name:"Steve"},
      {id:4, name:"Rick"}
    ].reduce(function(hash,person) {
      hash[person.id] = true;
      return hash;
    }, Object.create(null));
    
    var result = [1,2,9,5].filter(id => id in hash);
    
    console.log(result);

    与朴素的二次方法不同,这种方法的成本只是线性的(平均而言)。

    【讨论】:

      【解决方案2】:

      您可以通过_.map_.intersectionchosenid 的数组一起使用person

      var people = [{ id: 1, name: "Bill" }, { id: 2, name: "Sally" }, { id: 3, name: "Steve" }, { id: 4, name: "Rick" }],
          chosen = [1, 2, 9, 5],
          result = _.intersection(chosen, _.map(people, 'id'));
      
      console.log(result);
      <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

      【讨论】:

        【解决方案3】:

        您可以使用 filter()find() 执行此操作

        var arr = [
         {id:1, name:"Bill"},
         {id:2, name:"Sally"},
         {id:3, name:"Steve"},
         {id:4, name:"Rick"}
        ]
        
        var chosen = [1,2,9,5];
        
        var result = chosen.filter(function(e) {
          return arr.find(o => o.id == e);
        })
        
        console.log(result)

        【讨论】:

          【解决方案4】:

          你不妨用一个 reduce 来完成这项工作;

          var arr = [
           {id:1, name:"Bill"},
           {id:2, name:"Sally"},
           {id:3, name:"Steve"},
           {id:4, name:"Rick"}
          ],
          chosen = [1,2,9,5],
          result = arr.reduce((res,o) => { var fi = chosen.indexOf(o.id);
                                           fi !== -1 && res.push(chosen[fi]);
                                           return res;
                                         },[]);
          console.log(result);

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-09-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多