代码之家  ›  专栏  ›  技术社区  ›  SBB

Lodash按属性值筛选项不在数组中

  •  2
  • SBB  · 技术社区  · 6 年前

    我有一个数组的对象,我正试图用火山灰过滤。最终目标是返回数组中属性值不在另一个数组中的任何对象。

    let inUse = ['1','2'];
    let positionData = [{ 
        fieldID: '1',
        fieldName: 'Test1'
    },
    { 
        fieldID: '2',
        fieldName: 'Test2'
    },
    { 
        fieldID: '3',
        fieldName: 'Test3'
    }]
    
    // Only show me position data where the fieldID is not in our inUse array
    const original = _.filter(positionData, item => item.fieldID.indexOf(inUse) === -1);
    

    我试着用 indexOf 但我不认为我在这种情况下使用它。

    预期结果:

    original = { 
     fieldID: '3',
     fieldName: 'Test3'
    }
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Ben Blank    6 年前

    看起来你有你的 indexOf 向后;现在,它正在寻找 inUse 里面 item.fieldID .

    试试这个:

    const original = _.filter(positionData, item => inUse.indexOf(item.fieldID) === -1);
    
        2
  •  0
  •   Ori Drori    6 年前

    你可以使用 _.differenceWith() :

    const inUse = ['1','2'];
    const positionData = [{"fieldID":"1","fieldName":"Test1"},{"fieldID":"2","fieldName":"Test2"},{"fieldID":"3","fieldName":"Test3"}];
    
    const result = _.differenceWith(
      positionData, 
      inUse, 
      ({ fieldID }, id) => id === fieldID
    );
    
    console.log(result);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>