代码之家  ›  专栏  ›  技术社区  ›  mahan

es6-2级别中对象的过滤器阵列

  •  3
  • mahan  · 技术社区  · 6 年前

    我有一个类似于下面的JSON。

    [{
        "id": "13000001993",
        "title": "Most Popular",
        "answers": [{
            "id": "13000038079",
            "title": "Price",
          },
          {
            "id": "13000033122",
            "title": "Enrollment",
          }
        ]
      },
      {
        "id": "13000000675",
        "title": "Support Questions",
        "answers": [{
            "id": "13000003646",
            "title": "ADMIN Chat",
          },
          {
            "id": "13000033122",
            "title": "Enrollment",
          }
        ]
      },
      {
        "id": "130000005675",
        "title": "Delivery",
        "answers": [{
          "id": "13000003646",
          "title": "Cost",
        }]
      }
    ]

    我想过滤外部数组和 answers 基于 title 。假设我的搜索关键字为 Enrollment ,我只想返回 answer 如果其标题与关键字匹配,如以下数组。

    [{
        "id": "13000001993",
        "title": "Most Popular",
        "answers": [{
          "id": "13000033122",
          "title": "Enrollment",
        }]
      },
      {
        "id": "13000000675",
        "title": "Support Questions",
        "answers": [{
          "id": "13000033122",
          "title": "Enrollment",
        }]
      }
    ]

    https://codepen.io/anon/pen/VBzrYP

    2 回复  |  直到 6 年前
        1
  •  3
  •   CertainPerformance    6 年前

    因为输入和输出数组不是一对一的,而且您需要返回 已更改 对象而不是原始对象,您可能应该使用 reduce 一次性完成:

    const findTitle = 'Enrollment';
    const input=[{"id":"13000001993","title":"Most Popular","answers":[{"id":"13000038079","title":"Price",},{"id":"13000033122","title":"Enrollment",}]},{"id":"13000000675","title":"Support Questions","answers":[{"id":"13000003646","title":"ADMIN Chat",},{"id":"13000033122","title":"Enrollment",}]},{"id":"130000005675","title":"Delivery","answers":[{"id":"13000003646","title":"Cost",}]}]
    
    console.log(
      input.reduce((a, obj) => {
        const answers = obj.answers.filter(({ title }) => title === findTitle);
        if (answers.length > 0) a.push({ ...obj, answers });
        return a;
      }, [])
    );
        2
  •  0
  •   Mr.Js    6 年前

    您可以使用此功能进行搜索 answer 在一系列问题中。

    var data = [{"id":"13000001993","title":"Most Popular","answers":[{"id":"13000038079","title":"Price",},{"id":"13000033122","title":"Enrollment",}]},{"id":"13000000675","title":"Support Questions","answers":[{"id":"13000003646","title":"ADMIN Chat",},{"id":"13000033122","title":"Enrollment",}]},{"id":"130000005675","title":"Delivery","answers":[{"id":"13000003646","title":"Cost",}]}]
    
    function searchByAnswer (search_key) {
      var serach_result = null;
      
      data.forEach((question) => {
        var finded_answer = null;
    
        if (question.answers && question.answers.length) {
          finded_answer = question.answers.find((answer) => {
            return answer.title.match(search_key) !== null;
          });
          
          if (finded_answer)
          	search_result = finded_answer;
        }
      });
      
      return search_result;
    }