我当前正在尝试对类型为ITests的测试列表执行筛选。我使用lodash来执行过滤,因为有人建议使用它来执行此任务。我的目标是选择测试后,该测试将过滤并显示相应的问题。我现在知道的当前过滤器不起作用,我尝试了许多不同的变体,但似乎无法获得合适的过滤器。任何帮助是极大的赞赏。我希望我的问题简洁明了,并且对于所提供的摘录也有意义。
下面是我的代码段:
这是我的listGroup中的代码,在这里我尝试根据selectedTests筛选问题。我尝试在测试和问题共享时寻找其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的公共条目,因此,我将使用此字段基于所选测试访问已过滤的问题。
这是我的testActions.ts
export interface ITest {
name: string;
moduleName: string;
testType: TestType
export interface ITest {
name: string;
moduleName: string;
答案 0 :(得分:1)
JavaScript现在具有内置的数组过滤功能,可能具有更简单的API。它需要一个回调,该回调具有传递给它的元素,索引和原始数组,并且您可以根据需要接收任意数量的
。[edit]添加了检查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;
}
}
);