Как работать с ключами точечного нота в функции обозначения скобок? [дублировать]Javascript

Форум по Javascript
Ответить
Anonymous
 Как работать с ключами точечного нота в функции обозначения скобок? [дублировать]

Сообщение Anonymous »

Меня предоставляют ключевые имена (валидатором), которые являются строками с использованием точечной нотации. Например, спецификация проверки ключа chounctId может выглядеть так (для разных отделов):

Код: Выделить всё

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 
требуется и должен присутствовать в FormData .
Мое мышление началось так:

Код: Выделить всё

 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 */

}
}
Попытка перейти прямо в FormData [valyationRules .KeyName] не работает, потому что он ищет единый ключ "transfer.legal.dept" в FormData , который не существует.

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»