2016-12-14 68 views
1

我有一个对象,看起来像这样:设置嵌套键为False

var access = { 
    main: false, 
    createCatalog: { 
    enterCatalogDetails: false, 
    selectProducts: true, 
    previewStyles: true, 
    previewLayout: false 
    }, 
    createBoard: { 
    enterBoardDetails: false, 
    selectProducts: false, 
    previewLayout: false 
    } 
} 

对于每一个关键,我想设置的值设置为false。

我有以下的功能,即我通过资产反对:

function setInvalidObject (obj){ 
     var objCount = 0; 
     for(var p in obj){ 
     if(obj.hasOwnProperty(p)){ 
      objCount++; 
      setInvalidObject(obj[p]); 
     } 
     } 
     if(objCount === 0){ 
     obj = false; 
     } 
    } 

它试图通过运行,无论在哪里,需要设置一键虚假调用自身。问题是,它似乎覆盖了本身,我无法弄清楚为什么会发生这种情况。

回答

1

您需要检查属性是否为对象,然后迭代对象。然后继续循环。如果不是对象,则将该值设置为false。你不需要自己的物业柜台。

function setInvalidObject(obj) { 
 
    var objCount = 0; 
 
    for(var p in obj){ 
 
     if (obj.hasOwnProperty(p)) { 
 
      if (obj[p] && typeof obj[p] === 'object') { 
 
       setInvalidObject(obj[p]); 
 
       continue; 
 
      } 
 
      obj[p] = false; 
 
     } 
 
    } 
 
} 
 

 
var access = { main: false, createCatalog: { enterCatalogDetails: false, selectProducts: true, previewStyles: true, previewLayout: false }, createBoard: { enterBoardDetails: false, selectProducts: false, previewLayout: false } }; 
 

 
setInvalidObject(access); 
 
console.log(access);
.as-console-wrapper { max-height: 100% !important; top: 0; }

或者使用Object.keys并跳过检查hasOwnProperty

function setTo(object, value) { 
 
    Object.keys(object).forEach(function (k) { 
 
     if (object[k] && typeof object[k] === 'object') { 
 
      setTo(object[k], value); 
 
      return; 
 
     } 
 
     object[k] = value; 
 
    }); 
 
} 
 

 
var access = { main: false, createCatalog: { enterCatalogDetails: false, selectProducts: true, previewStyles: true, previewLayout: false }, createBoard: { enterBoardDetails: false, selectProducts: false, previewLayout: false } }; 
 

 
setTo(access, false); 
 
console.log(access);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+1

神奇。谢谢! – developthewebz