Javascript - Установить все значения во вложенном объекте в ноль - PullRequest
2 голосов
/ 09 мая 2020

У меня есть следующий объект, и я хочу установить все значения в нем равными null, сохраняя при этом структуру объектов

var objs = {
    a: {
        prop1: {id: null, val: 10},
        prop2: true,
        prop3: null,
    },
    b: {
        prop1: {id: null, val: 20},
        prop2: true,
        prop3: null,
    },
    c: 10
}

Результаты должны быть:

var objs = {
    a: {
        prop1: {id: null, val: null},
        prop2: null,
        prop3: null,
    },
    b: {
        prop1: {id: null, val: null},
        prop2: null,
        prop3: null,
    },
    c: null
}

Это решение работает для меня, и я считаю, что оно должно работать на любой глубине. Но если есть более элегантное или эффективное решение, дайте мне знать.

var objs = {
    a: {
        prop1: {id: null, val: 10},
        prop2: true,
        prop3: null,
    },
    b: {
        prop1: {id: null, val: 20},
        prop2: true,
        prop3: null,
    },
    c: 10
}

function nullTest(val){
    for (key in val) {
        if(typeof(val[key]) !== 'object') {
            val[key] = null;
        } else {
            val[key] = nullTest(val[key])
        }
    }
    return val
}

console.log(nullTest(objs));

Спасибо

1 Ответ

2 голосов
/ 09 мая 2020

Вы можете использовать Object.keys, чтобы получить все ключи объекта, l oop поверх них, используя forEach, и соответственно рекурсивно.

var objs = {
    a: {
        prop1: {id: null, val: 10},
        prop2: true,
        prop3: null,
    },
    b: {
        prop1: {id: null, val: 20},
        prop2: true,
        prop3: null,
    },
    c: 10
}
function nullTest(val){
    return Object.keys(val).forEach(k=>val[k]=val[k]===Object(val[k])?nullTest(val[k]):null), val;
}
console.log(nullTest(objs));

Вы можете использовать Array.prototype.reduce для создания нового объекта без изменения старого.

const objs = {
    a: {
        prop1: {id: null, val: 10},
        prop2: true,
        prop3: null,
    },
    b: {
        prop1: {id: null, val: 20},
        prop2: true,
        prop3: null,
    },
    c: 10
};
function nullTest(val){
    return Object.keys(val).reduce((acc,key)=>(acc[key]=val[key]===Object(val[key])?nullTest(val[key]):null,acc),{});
}
console.log('new object:', nullTest(objs));
console.log('objs:', objs);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...