You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 12:25:17