2013-01-15 40 views
6

मेरे पास नीचे एक वृक्ष वस्तु है, मैं खाली होने पर आइटम सरणी संपत्ति को निकालने का प्रयास कर रहा हूं। मुझे यह करने के लिए सबसे अच्छा तरीका नहीं है?नेस्टेड जावास्क्रिप्ट ऑब्जेक्ट से किसी संपत्ति को निकालने का सबसे अच्छा तरीका क्या है?

मैं कुंजी के माध्यम से लूपिंग के बारे में सोच रहा हूं, संपत्ति की जांच कर रहा हूं और फिर delete myJSONObject[prop] का उपयोग कर हटा रहा हूं ... किसी भी विचार/विचारों का स्वागत है?

[{ 
    text: "TreeRoot", 
    items: [{ 
     text: "Subgroup1", 
     items: [] 
    }, { 
     text: "Subgroup2", 
     items: [] 
    }, { 
     text: "Subgroup3", 
     items: [], 
     items: [{ 
      text: "subgroup5", 
      items: [{ 
       text: "subgroup6", 
       items: [{ 
        text: "subgroup7", 
        items: [{ 
         text: "subgroup8", 
         items: [] 
        }] 
       }] 
      }] 
     }] 
    }] 
}] 
+0

मैं बू होगा इसे संशोधित करने की कोशिश करने के बजाय, एक नई वस्तु को हल्का करें। –

+0

अरे, आपने अभी तक इसे हल किया है? – Gideon

+0

http://stackoverflow.com/questions/9446426/how-do-you-recursively-remove-nested-objects-that-contain-an-empty-array – J4S0Nc

उत्तर

1

आप पुनरावर्ती एल्गोरिदम कि हर कदम पर या तो items सरणी और रिटर्न निकाल देता है, या रिकर्सिवली सरणी के प्रत्येक व्यक्ति वस्तु प्रक्रियाओं हो सकता है।

मैं सर्वर-साइड पर ऐसा करने का भी प्रयास करता हूं। यह बहुत जटिलता, स्मृति, और प्रसंस्करण समय बचाएगा। JSON एन्कोडेड स्ट्रिंग से खाली सरणी को "छोड़कर" के तरीके आमतौर पर होते हैं।

1

यह काम (ES5) करना चाहिए:

function removeEmpty(obj) { 
    Object.keys(obj).forEach(function(key) { 
    (key === 'items' && obj[key].length === 0) && delete obj[key] || 
    (obj[key] && typeof obj[key] === 'object') && removeEmpty(obj[key]) 
    }); 
    return obj; 
}; 

JSBIN

ES6 में ही:

const removeEmpty = (obj) => { 
    Object.keys(obj).forEach(key => 
    (key === 'items' && obj[key].length === 0) && delete obj[key] || 
    (obj[key] && typeof obj[key] === 'object') && removeEmpty(obj[key]) 
); 
    return obj; 
}; 

JSBIN