Фильтрация с использованием lodash - PullRequest
0 голосов
/ 19 сентября 2019

В настоящее время я пытаюсь выполнить фильтр в списке тестов, относящихся к типу ITests.Я использую lodash для выполнения фильтрации, потому что кто-то рекомендовал его для выполнения этой задачи.Какова моя цель, когда я выберу тест, тест отфильтрует и покажет соответствующие вопросы.Текущий фильтр, который у меня есть сейчас, я знаю, не работает, я пробовал много разных вариантов, но, похоже, не могу получить правильный фильтр.Любая помощь очень ценится.Я надеюсь, что мои вопросы кратки и имеют смысл с предоставленными фрагментами.

Ниже приведены фрагменты моего кода:

Это код в моей группе рассылки, где я пытаюсь фильтровать вопросы на основевыбранные тесты.Обычная запись, в которой я пытаюсь найти его moduleName как общий ресурс для теста и вопросов.

Это внутри моего ListGroup.tsx, здесь выполняется фильтрация.

import * as React from "react";
import {
  UpdateSelectedTestType,
  UpdateSelectedTest
} from "../actions/TestActions";
import { ITestState } from "../models/ITestState";
import * as _ from "lodash";
interface IProps {
  onUpdatetoggleTestState: typeof UpdateSelectedTestType;
  toggleTestState: ITestState;
  onUpdateSelectedTest: typeof UpdateSelectedTest;
}
export class ListGroup extends React.Component<IProps> {
  public render() {
    let question = null
    if(this.props.toggleTesttate.selectedTest !=  undefined)
      var selectedtest = this.props.toggleTestState.selectedTest.moduleName
      questions = this.props.toggleTestState.questions
      var filterquestions = _.filter(questions, function(o){
        return _.isMatch(o, selectedtest )
      })
     console.log(filterquestion)
    return (
    );
  }
}

Это мой toggleButtonReducer.ts

const initialState: ITestState = {
  testype: TestType.test1,
  tests: dbTest,
  questions: dbQuestions,
  selectedTest: undefined
  //selectedQuestion: undefined
};

Тесты и вопросы имеют общую запись под названием moduleName, поэтому я буду использовать это поле для доступа к отфильтрованным вопросам, основанным на выбранном тесте.

Это мои тестовые действия.тс

export interface ITest {
  name: string;
  moduleName: string;
  testType: TestType


 export interface ITest {
      name: string;
      moduleName: string;

1 Ответ

1 голос
/ 19 сентября 2019

Javascript теперь имеет встроенную фильтрацию массива, которая может иметь более простой API.Он принимает обратный вызов, в который передаются элемент, индекс и исходный массив, и вы можете взять их столько, сколько вам необходимо.

[править] Добавлена ​​проверка, является ли selectedTest массивом имен модулей

let selectedtest = this.props.toggleTestState.selectedTest.moduleName
let questions = this.props.toggleTestState.questions
let filteredQuestions = questions.filter(
  question => {
    if (Array.isArray(selectedTest) {
      return selectedTest.includes(question.moduleName);
    } else {
      return question.moduleName === selectedTest;
    }
  }
);
...