我具有以下功能:
public exist(index: number, type: string): boolean {
return this.forms.filter(form => form.index == index + 1 && form.type == type).length > 0;
}
如果元素存在于对象数组中,则此函数返回true / false。
如何返回两个函数而不是布尔值:_exist() {},
和form()
像这样使用:
const e = this.exist(1, 'formLogin');
if (e._exist()) {
console.log(e.form());
}
这意味着如果this.forms.filter
返回true,我可以访问e.form()
我认为我需要使用闭包
我试图这样做:
public exist(index: number, type: string) {
const lookForm = this.forms.filter(form => form.index == index + 1 && form.type == type);
const lookFormExist = form.length > 0;
function form() {
return lookForm.shift();
}
return lookFormExist;
}
答案 0 :(得分:2)
只需返回一个带有函数的对象。
单独:filter(...).length > 0
永远不是正确地检查数组中是否存在东西的正确方法。如果是===
检查,则使用indexOf
;如果需要,请使用some
(视情况而定)。但是在这种情况下,您似乎想使用表格,在这种情况下,您将使用find
:
public exist(index: number, type: string): ExistResult {
const form = this.forms.find(form => form.index == index + 1 && form.type == type);
return {_exist() { return !!form; }, form() { return form; }} as ExistResult;
}
...其中ExistResult
是您要为此定义的类型。
但是,我不会这样做。我只返回find
的结果,并使用表单,如果结果虚假,则分支。我可能还会更改函数的名称。
public findForm(index: number, type: string): Form {
return this.forms.find(form => form.index == index + 1 && form.type == type);
}
然后
const form : Form = this.findForm(1, 'formLogin');
if (form) {
console.log(form);
}