【问题标题】:Ramda - find objects that match from arraysRamda - 从数组中查找匹配的对象
【发布时间】:2018-01-16 08:14:40
【问题描述】:

从以下两个列表list1list2 中,我需要从list1 返回与headtail 的值匹配的对象来自list2

我试图使用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

【问题讨论】:

    标签: javascript ramda.js


    【解决方案1】:

    如果你想使用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>

    【讨论】:

    • 我可以更简单地使用 R.intersection,因为我有一个键列表,然后我可以将其与对象上的 R.keys 进行比较。比我找到的其他选项简单得多,因为这将我引导到 Relation Ramda 页面,所以我正在搜索 List 方法。
    【解决方案2】:

    是的。

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

    Find 将返回第一个匹配项。如果你想找到所有匹配。将find 更改为filter

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-29
      • 2013-09-16
      • 2020-10-14
      • 2019-05-20
      • 2020-06-20
      • 1970-01-01
      • 2021-07-08
      • 1970-01-01
      相关资源
      最近更新 更多