簡體   English   中英

如果對象包含具有空數組的鍵,如何刪除該對象?

[英]How do I remove an object if it contains a key with an empty array?

我有一個對象數組。 我的目標是刪除包含鍵為空數組的對象。

我正在使用ramda,但此刻正在撞牆。

const myData = {
  "one": {
    "two": {
      "id": "1",
      "three": [{
        "id": "33",
        "copy": [{
            "id": "1",
            "text": "lorem",
            "answer": [],
          },
          {
            "id": "2",
            "text": "ipsum",
            "answer": [{
              "id": 1,
              "class": "science"
            }]
          },
          {
            "id": "3",
            "text": "baesun",
            "answer": [{
              "id": 2,
              "class": "reading"
            }]
          }
        ],
      }]
    }

  }
}

flatten(pipe(
    path(['one', 'two', 'three']),
    map(step => step.copy.map(text => ({
      answers: text.answer.map(answer => ({
        class: answer.class,
      })),
    }), ), ))
  (myData))

結果:

[{"answers": []}, {"answers": [{"class": "science"}]}, {"answers": [{"class": "reading"}]}]

這是期望:

[{"answers": [{"class": "science"}]}, {"answers": [{"class": "reading"}]}]

使用path獲取內部three數組,將數組鏈接在copy屬性內部,並將它們投影為僅包含answer 拒絕空答案,然后將每個答案中的對象演變為僅包含class屬性。

 const {pipe, path, chain, prop, project, reject, propSatisfies, isEmpty, map, evolve} = ramda const transform = pipe( path(['one', 'two', 'three']), // get the array chain(prop('copy')), // concat the copy to a single array project(['answer']), // extract the answers reject(propSatisfies(isEmpty, 'answer')), // remove empty answers map(evolve({ answer: project(['class']) })) // convert the objects inside each answer to contain only class ) const data = {"one":{"two":{"id":"1","three":[{"id":"33","copy":[{"id":"1","text":"lorem","answer":[]},{"id":"2","text":"ipsum","answer":[{"id":1,"class":"science"}]},{"id":"3","text":"baesun","answer":[{"id":2,"class":"reading"}]}]}]}}} const result = transform(data) console.log(result) 
 <script src="//bundle.run/ramda@0.26.1"></script> 

使用filter

 const filter = R.filter, flatten = R.flatten, pipe = R.pipe, path = R.path, map = R.map; const myData = { "one": { "two": { "id": "1", "three": [{ "id": "33", "copy": [{ "id": "1", "text": "lorem", "answer": [], }, { "id": "2", "text": "ipsum", "answer": [{ "id": 1, "class": "science" }] }, { "id": "3", "text": "baesun", "answer": [{ "id": 2, "class": "reading" }] } ], }] } } } const result = filter(answersObj => answersObj.answers.length, flatten(pipe( path(['one', 'two', 'three']), map(step => step.copy.map(text => ({ answers: text.answer.map(answer => ({ class: answer.class, })) }))) )(myData))) console.log(result); 
 <script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM