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

如何使用Ramda过滤对象各属性的内部数组,保留首元素符合阈值条件的项

Ramda 按子数组首元素过滤对象属性的实现方法

完整实现代码

import * as R from 'ramda';

// 原数据
const arrays = {
  one: [[1, 33, 41], [2, 0, 27], [3, 7, 9], [4, 1, 3]],
  two: [[1, 77, 2], [2, 6, 3], [3, 0, 0], [4, 55, 3]],
  three: [[1, 4, 6], [2, 0, 0], [3, 5, 6], [4, 0, 0]],
};

// 柯里化过滤函数,参数为阈值,返回可直接处理目标对象的函数
const filterArrays = (threshold) => R.map(
  R.filter(R.pipe(
    R.head,
    R.lte(R.__, threshold)
  ))
);

// 传入阈值3调用,得到结果
const result = filterArrays(3)(arrays);

逻辑说明

  • 外层R.map用于遍历原对象的所有属性值,保证返回结果的对象结构和原对象完全一致,全程不会修改原数据。
  • 对每个属性对应的二维数组,用R.filter做元素过滤。
  • 过滤条件通过R.pipe组合两个操作:先取子数组的第一个元素R.head,再判断该元素是否小于等于阈值。其中R.__是Ramda的参数占位符,表示阈值放在比较逻辑的右侧,确保判断逻辑为「子数组首元素 <= 阈值」。

运行后得到的result和预期输出完全一致:

{
  one:   [[1,33,41], [2,0,27], [3,7,9]],
  two:   [[1,77,2],  [2,6,3],  [3,0,0]],
  three: [[1,4,6],   [2,0,0],  [3,5,6]],
}

内容的提问来源于stack exchange,提问作者Virto111

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 03:06:03