Javascript 如何从表单输入动态生成代码?

Javascript 如何从表单输入动态生成代码?,javascript,typescript,Javascript,Typescript,我有一个应用程序,允许我们在折扣酒店房间预订客人;诀窍在于,客人只能去某些地方,这取决于他们所处的人口结构、年龄、婚姻状况、收入、一年中的时间等。。。目前,所有这些规则都已硬编码到我的程序中,但负责营销的人越来越多地要求我更改这些规则,这占用了我所有的时间。我想建立一个管理门户,允许他们使用下拉菜单配置规则,获取下拉菜单返回的字符串,并使用函数对象创建新函数;然而,这似乎不起作用,我的问题有两个,1我做错了什么?2有没有更好的方法来实现我的目标 TL;DR:如何创建一个基于表单输入中定义的变量返

我有一个应用程序,允许我们在折扣酒店房间预订客人;诀窍在于,客人只能去某些地方,这取决于他们所处的人口结构、年龄、婚姻状况、收入、一年中的时间等。。。目前,所有这些规则都已硬编码到我的程序中,但负责营销的人越来越多地要求我更改这些规则,这占用了我所有的时间。我想建立一个管理门户,允许他们使用下拉菜单配置规则,获取下拉菜单返回的字符串,并使用函数对象创建新函数;然而,这似乎不起作用,我的问题有两个,1我做错了什么?2有没有更好的方法来实现我的目标

TL;DR:如何创建一个基于表单输入中定义的变量返回true或false的函数

以下是我编译字符串的方式:

 package(input: Rule) {
    const expandedProperties = input.properties.map((prop: Property) => {
      let loaded = prop.operator.split('$ANCHOR').join(prop.anchor);
      loaded = loaded.split('$COMPARE').join(prop.compare);
      loaded = loaded.split('$CHAIN').join(prop.chain);
      return loaded;
    });
    let builtProperty = '';
    expandedProperties.forEach(prop1 => {
      builtProperty += `
      ${prop1}`;
    });
    const finalRule = `const and = []
const or = []
${builtProperty}
const andIsTrue = and.indexOf(false) === -1;
const orIsTrue = or.indexOf(true) !== -1;
return andIsTrue || orIsTrue;
`;
    return function(Developer, guest) {
    };

  }
以下是一些示例字符串: 接线员

比较

export enum Weekdays {
  Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday,
}

export const comparisons = {
  Monday: Weekdays.Monday,
  Tuesday: Weekdays.Tuesday,
  Wednesday: Weekdays.Wednesday,
  Thursday: Weekdays.Thursday,
  Friday: Weekdays.Friday,
  Saturday: Weekdays.Saturday
};
锚定

export var Anchors = {
  DeveloperName: `const developer: DeveloperInterface = arguments[0];
  const guest: Guest = arguments[1];
  return developer.meta;`,
  SelectedWeekday: 'Guest.Date'
};
链子


我对你的代码有点困惑,但乍一看,你似乎想利用一种称为“currying”的技术,它本质上是一个返回函数的函数,因此,你不用编写文字代码,而是编写一个基于初始输入返回适当函数的函数,在这里阅读更多:当你说“允许他们使用下拉菜单配置规则”时,我对你的意思感到困惑。这个下拉列表里有什么?从下拉列表中选择与代码示例中的内容如何对应?下拉列表中的内容是每个对象的object.keys,值是对象中键的值,因此如果我在操作符下拉列表中选择equals,它将给出“if($ANCHOR====$COMPARE){'+'$CHAIN.push(true)+}else”{'+'$CHAIN.push(false)'+'}
export var Anchors = {
  DeveloperName: `const developer: DeveloperInterface = arguments[0];
  const guest: Guest = arguments[1];
  return developer.meta;`,
  SelectedWeekday: 'Guest.Date'
};
export var chains = {
  or: 'or'
};