#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; }