Удалить заданную запись из объекта в javascript

#javascript #object

#javascript #объект

Вопрос:

Привет всем с функцией, которую я хочу удалить запись (которую я даю в качестве аргумента) из объекта (который я также даю в качестве аргумента). Чтобы было понятнее, я предоставлю вам некоторый код.

Вот объект, из которого я хочу удалить запись:

 const register = {
    aap :[{condition: {aap:'aap'}, func: 'fun'}],
    aap1 :[{condition: {aap1:'aap1'}, func: 'fun'},{condition: {aap2:'aap2'}, func: 'fun'}],
};
 

Запись, которую я хочу удалить, выглядит следующим образом : {aap:'aap'}

Затем я бы вызвал функцию следующим образом myfunction(register,{aap:'aap'})

В приведенном выше случае удалите объект данного условия из регистра.

Теперь вот что я создал сам :

 const register = {
    aap :[{condition: {aap:'aap'}, func: 'fun'}],
    aap1 :[{condition: {aap1:'aap1'}, func: 'fun'},{condition: {aap2:'aap2'}, func: 'fun'}],
};



function hallo(register,condition){
    const objKeys = [];

    for(key in register){
        objKeys.push(key);
    }

    objKeys.forEach(function(el){
       console.log(register[el]);
    })

}

hallo(register);
 

Я понял, как получить некоторые результаты, которые я мог бы использовать для удаления из :

 [ { condition: { aap: 'aap' }, func: 'fun' } ]
[ { condition: { aap1: 'aap1' }, func: 'fun' },
  { condition: { aap2: 'aap2' }, func: 'fun' } ]
 

Но я до сих пор не понял, как удалить запись, соответствующую той, которую я даю в своей функции.

Короче говоря. Мне нужна функция, которая содержит 2 аргумента. Одним аргументом является регистр (объект, из которого я хотел бы удалить), а вторым — условие, которое я хотел бы удалить.

После возврата функции желаемый результат должен быть :

 const register = {
    aap :[{condition: {}, func: 'fun'}],
    aap1 :[{condition: {aap1:'aap1'}, func: 'fun'},{condition: {aap2:'aap2'}, func: 'fun'}],
};
 

Регистр минус условие, которое я хотел удалить.

Комментарии:

1. delete register.aap ? Или delete register["aap"]; ?

2. myfunction(register,{aap:'aap'}) это не лучший способ вызвать вашу функцию, поскольку ваш второй аргумент передает уникальный экземпляр объекта. Независимо от того, выглядит ли этот объект точно так же, как объект в вашей цели, это не одно и то же. Возможно, вам лучше преобразовать цель в строку, а затем передать строку для удаления.

3. @JonasWilms Я хочу удалить только условие, соответствующее аргументу, который я передаю своей функции, которая является литералом объекта

4. Какой ожидаемый результат myfunction(register,{aap:'aap'}) ?

5. Я бы хотел, чтобы регистр был преобразован в это: const register = { aap:[{условие: {}, функция: ‘fun’}], aap1:[{условие: {aap1:’aap1′}, функция: ‘fun’},{условие: {aap2:’aap2′}, func: ‘fun’}], }; @MaheerAli

Ответ №1:

Вы могли бы использовать рекурсивный подход, перебрав все ключи объекта и проверив, есть ли ключ, value и удалить этот ключ в объекте.

Перейдите к вложенным объектам.

 function remove(object, value) {
    Object.keys(object).forEach(key => {
        if (key in value amp;amp; object[key] === value[key]) {
            delete object[key];
            return;
        }
        if (object[key] amp;amp; typeof object[key] === 'object') {
            remove(object[key], value);
        }
    });
    return object;
}

const register = { aap: [{ condition: { aap: 'aap' }, func: 'fun' }], aap1: [{ condition:  {aap1: 'aap1' }, func: 'fun' }, { condition: { aap2: 'aap2' }, func: 'fun' }] };

console.log(remove(register, { aap: 'aap' })); 
 .as-console-wrapper { max-height: 100% !important; top: 0; }