使用Ramda根据指定属性比较两个对象数组并返回匹配项
使用Ramda匹配两个数组中的对象
问题描述
现有两个对象数组:
const arr1 = [ { id: "1", name: "Test 1" }, { id: "2", name: "Test 2" } ] const arr2 = [ { groupId: "125", age: 44, subGroup: { id: "1", name: "Test 1" } } ]
需要通过Ramda根据id属性(匹配值为"1"的项),从arr2中筛选出匹配的对象,预期结果:
[ { groupId: "125", age: 44, subGroup: { id: "1", name: "Test 1" } } ]
解决方案
可以通过Ramda的组合函数快速实现需求,分两种场景处理:
场景1:仅匹配特定id(如"1")
直接针对指定id值过滤arr2,用R.filter结合R.pathEq判断嵌套的id属性:
const R = require('ramda'); const matchById = R.filter(R.pathEq(['subGroup', 'id'], '1')); const result = matchById(arr2); console.log(result);
场景2:匹配arr1中所有存在的id(通用场景)
如果需要匹配arr1里所有id对应的arr2项,先提取arr1的id集合,再过滤arr2:
const R = require('ramda'); // 提取arr1中的所有id const targetIds = R.pluck('id', arr1); // 过滤arr2,判断subGroup.id是否在目标id集合中 const matchByArr1Ids = R.filter(R.pipe(R.path(['subGroup', 'id']), R.contains(R.__, targetIds))); const result = matchByArr1Ids(arr2); console.log(result);
两种方式都能得到预期结果,第一种更贴合当前特定需求,第二种扩展性更强,适用于arr1包含多个待匹配id的场景。
内容的提问来源于stack exchange,提问作者mjolk
相关产品推荐
相关产品推荐

