Код: Выделить всё
ValidationRules =
[
{
KeyName: "Transfer.Legal.Dept",
Required: true
MinLength: 3,
MaxLength: 3,
ValidRegex: `^.{3}$`,
}
,
{
KeyName: "Transfer.Accounts.Dept",
MinLength: 4,
MaxLength: 10,
ValidRegex: `^\\d{4,10}$`,,
}
]
< /code>
Представленные данные формы будут иметь форму, аналогичную этим: < /p>
FormData =
{
Tranfser: {
Legal: {Dept: "Disbursements", Amount: 50, Direction: "Out"},
Accounts: {Dept: "Fees", Amount: 50, Direction: "In" }
},
Provider: "General Pay",
SomeRandomStuff: {Rand1: "j6b", Rand2: "pm13"}
}
< /code>
Проверка по спецификации проверки, задача состоит в том, чтобы проверить каждое свойство в данных формы по критериям проверки с помощью KeyName. Таким образом, Transfer.legal.dept Мое мышление началось так:
Код: Выделить всё
for (let i = 0; i < ValidationRules.length; i++) {
const KeyNameArray = ValidationRules[i].KeyName.split('.');
// ["Transfer", "Legal", "Dept"]
if (ValidationRules[i].Required) {
// Check if Dept property (key+value) is in FormData.Transfer.Legal
KeyNameArray[KeyNameArray.length-1] in FormData[KeyNameArray.length-2]
/* The above should check if last item in KeyNameArray i.e. Dept is in FormData.Transfer.Legal
* But it doesn't check any other levels e.g. if Legal is in FormData.Transfer
*/
// Now check if FormData.Transfer.Legal.Dept != null and has a value
/* See ideas below */
}
}
Код: Выделить всё
for (i=0; i < KeyNameArray.length; i++){
/* How to build up the selector to end up with:
* FormData["Transfer"]["Legal"]["Dept"]
*/
}
< /code>
Но я не могу «создать» селектор, как выше. Или, может быть, весь этот подход неверен. Я видел кое -что о функции Array.reduce Подробнее здесь: https://stackoverflow.com/questions/796 ... n-function
Мобильная версия