繁体   English   中英

使用 Ramda 映射和深层对象

[英]map and deep object with Ramda

我需要按“段”属性过滤,在这种情况下,我需要按段过滤:[名称:“一般]

我有以下数组

const lines = [{
    id: 1191,
    name: "dev",
    segments: []
  },
  {
    id: 1192,
    name: "credit",
    folder: "Embarazadas",
    segments: [{
        "name": "general",
      },
      {
        "name": "custom",
      }
    ]
  },
  {
    id: 1311,
    name: "box",
    segments: [{
      "name": "custom",
      "line_id": 1431,
      "id": 21,
      "active": true
    }]
  },
  {
    id: 2000,
    name: "sin folder",
    folder: null,
    segments: [{
        "name": "custom",
      },
      {
        "name": "general",
      }
    ],
  },
  {
    id: 2000,
    name: "credit card",
    segments: [{
      "name": "general",
    }],
  },
]

我需要使用段“通用”获取所有对象

我试过用 Ramda 做这个,但我没有得到结果,首先我做了一个线条图,然后是一个过滤器。 问题是有时段属性到达空

const filterLinesBySegments = (lines) => {
  const filter = (line) => {
    const hasSegments =R.filter(seg => seg["name"] === "general")(line.segments)
    const newLine = R.compose(
      R.assoc("segments", hasSegments),
    )(line)
    return newLine

  }
  const new= R.map(item => {
      return R.filter(line => {
        return filter(line)
      })(item)

  })(lines)

  return new;
}   

要仅保留具有一般段的行,您可以使用 R.filter 和 R.where 来按特定属性进行过滤。 由于segments是一个数组,因此使用R.any 来搜索某些对象是否具有general name

要从段中删除自定义,您可以进化对象的段,并拒绝name: custom所有项目。

 const { filter, where, any, propEq, reject, evolve, pipe, map } = R const filterLinesBySegments = filter(where({ segments: any(propEq('name', 'general')) })) const filterCustomFromSegments = evolve({ segments: reject(propEq('name', 'custom')) }) const fn = pipe( filterLinesBySegments, map(filterCustomFromSegments), ) const lines = [{"id":1191,"name":"dev","segments":[]},{"id":1192,"name":"credit","folder":"Embarazadas","segments":[{"name":"general"},{"name":"custom"}]},{"id":1311,"name":"box","segments":[{"name":"custom","line_id":1431,"id":21,"active":true}]},{"id":2000,"name":"sin folder","folder":null,"segments":[{"name":"custom"},{"name":"general"}]},{"id":2000,"name":"credit card","segments":[{"name":"general"}]}] const result = fn(lines) console.log(result)
 <script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.0/ramda.js"></script>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM