Задать вопрос
@Slav4ka

Как динамически создавать объект?

Добрый день! Такая ситуация: есть такой интерфейс:
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]
        }
        
    }
}
  • Вопрос задан
  • 72 просмотра
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы