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

Ramda-从数组中查找匹配的对象

  •  1
  • hyprstack  · 技术社区  · 6 年前

    从以下两个列表中 list1 list2 ,我需要从 列表1 head tail 从…起 列表2 .

    我试图通过使用 ramdajs .

    const list1 = [ 
      { tail: 'A', head: 'B', distance: '5' },
      { tail: 'B', head: 'C', distance: '4' },
      { tail: 'C', head: 'D', distance: '8' },
      { tail: 'D', head: 'C', distance: '8' },
      { tail: 'D', head: 'E', distance: '6' },
      { tail: 'A', head: 'D', distance: '5' },
      { tail: 'C', head: 'E', distance: '2' },
      { tail: 'E', head: 'B', distance: '3' },
      { tail: 'A', head: 'E', distance: '7' } 
    ]
    
    const list2 = [ { tail: 'A', head: 'B' }, { tail: 'B', head: 'C' } ]
    
    // result should be [{ tail: 'A', head: 'B', distance: '5' },
    // { tail: 'B', head: 'C', distance: '4' }] from list1
    
    2 回复  |  直到 6 年前
        1
  •  4
  •   kakamg0    6 年前

    如果要使用 ramdajs 您可以使用 innerJoin 要选择与如下谓词匹配的项:

    const list1 = [ 
      { tail: 'A', head: 'B', distance: '5' },
      { tail: 'B', head: 'C', distance: '4' },
      { tail: 'C', head: 'D', distance: '8' },
      { tail: 'D', head: 'C', distance: '8' },
      { tail: 'D', head: 'E', distance: '6' },
      { tail: 'A', head: 'D', distance: '5' },
      { tail: 'C', head: 'E', distance: '2' },
      { tail: 'E', head: 'B', distance: '3' },
      { tail: 'A', head: 'E', distance: '7' } 
    ];
    
    const list2 = [ { tail: 'A', head: 'B' }, { tail: 'B', head: 'C' } ];
    
    const result = R.innerJoin(
      (item1, item2) => item1.tail === item2.tail && item1.head === item2.head,
      list1,
      list2
    );
    
    console.log(result);
    <script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>
        2
  •  1
  •   Giang Le    6 年前

    是 啊

    const list = list1.find(item => {
         return list2.findIndex(i => i.head === item.head && i.tail === item.tail) !== -1;
    });
    

    Find将返回第一个匹配项。如果要查找所有匹配项。改变 find filter