Добрый день! Такая ситуация: есть такой интерфейс:
interface IParams {
value?: number;
current?: number;
}
interface IObj {
params?: IParams;
age?: number;
animal?: string;
}
Нужно написать функцию, которая создает объект только с тем ключом, который пришел. То есть, если пришел ключ value, то объект должен выглядеть так:
{
params: {
value: 5
}
}
Попробовал такую реализацию, но при вложенности больше 2 она не работает.
const paths = {
value: ['params','numberic', 'value'],
current: ['params', 'current'],
age: null,
animal: null
}
const keysArray = Object.keys(paths);
const obj: IObj = {}
const toEnter = { value: 5}
const tail = ([, ...t]: string[]) => t;
const head = ([h]: string[]) => h;
const make = (path: string[], value: any, intermediat: object) => {
if (path.length === 1) {
return intermediat[path[0]] = value
} else {
obj[head(path)] = {}
make(tail(path), value, obj[head(path)]);
}
}
for (const keyToInput in toEnter) {
if (keysArray.indexOf(keyToInput) > -1) {
if (paths[keyToInput] !== null) {
make(paths[keyToInput], toEnter[keyToInput], {});
} else {
obj[keyToInput] = toEnter[keyToInput]
}
}
}