JS iterate over an object and remove the enabled false

时间:2017-11-13 06:35:04

标签: javascript

I have a dynamic object with the following structure:

{
 a: {
  someKey: {
    propOne: '',
    enabled: true
  }
 },
 b: {
  someKey: {
    propOne: '',
    enabled: false
  }
 },
c: {
  someKey: {
    propOne: '',
    enabled: false
  }
 },
   someKey: {
      ab: {
        propOne: '',
        enabled: true
      }
     }
    }

I need to remove the tree with the enabled false. So in the above example the result should be:

 const result = {
     a: {
      someKey: {
        propOne: '',
        enabled: true
      }
     },


   d: {
      someKey: {
        propOne: '',
        enabled: true
      }
     }
    }

How can I do this?

3 个答案:

答案 0 :(得分:1)

您可以使用值为enabled的属性false进行递归检查,并从对象中删除此分支。



function deleteKey(object) {
    Object
        .keys(object)
        .forEach(function (key) {
            if (object[key].enabled === false) {
                delete object[key];
                return;
            }
            if (object[key] && typeof object[key] === 'object') {
                deleteKey(object[key]);
                if (!Object.keys(object[key]).length) {
                    delete object[key];
                }
            }
        });
}

var object = { name: "WHITE_THEME", source: "WHITE_THEME", page: { layout: { grid: "TILES", margin: { enabled: true, left: 15, top: 15, right: 15, bottom: 15 } }, background: { filter: { enabled: false, blur: { enabled: false, value: null, unit: "px" }, brightness: { enabled: false, value: 100, unit: "%" }, contrast: { enabled: false, value: 0, unit: "%" }, grayscale: { enabled: false, value: 0, unit: "%" }, invert: { enabled: false, value: 0, unit: "%" }, opacity: { enabled: false, value: 100, unit: "%" }, saturate: { enabled: false, value: 100, unit: "%" } }, color: { enabled: false, value: "rgba(232, 232, 232, 1)" } } } };

deleteKey(object);

console.log(object);

.as-console-wrapper { max-height: 100% !important; top: 0; }




答案 1 :(得分:0)

With lodash:

result = _.filter(test, o => o.ab.enabled)

答案 2 :(得分:0)

you can use delete :

   var atocken = {
     a: {
      ab: {
        propOne: '',
        enabled: true
      }
     },
     b: {
      ab: {
        propOne: '',
        enabled: false
      }
     }
    }

    if(atocken.b.ab.enabled === false)
    {
      delete atocken.b;
    }