Я пытаюсь написать функцию утилиты белого списка, которую можно использовать для нескольких различных запросов на пост и патч. Прямо сейчас я пытаюсь заставить это работать только для одного сценария. Пользователь делает запрос на публикацию, запрос возвращается с объектом, который имеет несколько полей, мы только хотим, чтобы пользователь мог создавать или редактировать определенные поля в запросе. Для этого примера два поля - это key1 и invoiceDate.
У меня есть массив, который я определяю заранее, здесь он называется acceptLine1. Этот служебный метод должен иметь возможность сравнивать тело запроса с массивом acceptFields и определять, что это vLineValue, создавать копию тела запроса, новое тело будет иметь только ключи key1 и invoiceDate и должно заполнять новые объекты. ключи со значениями из запроса, отправленного пользователем.
У меня проблемы с проверкой и возвращением нового объекта со значениями. Прямо сейчас, объект результата делает копию всех ключей из объекта запроса и всех значений из объекта запроса, он должен только сделать копию полей key1 и invoiceDate и заполнить его значениями из запроса.
Извините за длинное объяснение, надеюсь, оно ясное, если понадобятся какие-либо разъяснения, я буду рад объяснить дальше.
const acceptableLine1 = ['invoiceDate', 'key1']
// body that comes from a bill line post request
let vLineValue = {
id: 19,
invoiceDate: '2000-01-25',
key1: 'abc',
}
export default async (
body,
acceptableFieldsOne,
acceptableFieldsTwo,
acceptableFieldsThree,
// acceptable fields are arrays of acceptable fields for post or patch requests to bills, bill-lines, dist-lines
) => {
// start off with taking the body input and making a copy of it
const whiteListBody = body;
// after making a copy of the body, check each of the arrays, see if the body has keys that match any of the array strings
// get an array of the keys from the body
const whiteListObjectKeys = Object.keys(whiteListBody);
// get an array of the whiteList objects values
const whiteListObjectValues = Object.values(whiteListBody);
// compare whiteListObjectKeys array with each of the acceptableFields arrays
// if the arrays match, return a new object with the keys that match and their original values
// result should only have the keys 'key1' and 'invoiceDate' with the values 'abc', '2000-01-25'
result = Object.fromEntries(
whiteListObjectKeys.map((_, i) => [
whiteListObjectKeys[i],
whiteListObjectValues[i],
])
);
};