2016-12-14 85 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