2011-12-15 14 views
8

छनन बिना jQuery के $ .grep का उपयोग कर ऑब्जेक्ट की श्रृंखला को फ़िल्टर करने से एक वस्तु (data) ऑब्जेक्ट की श्रृंखला के चारों ओर लपेटकर के लिए ठीक काम करता है:एक वस्तु आवरण

var arr = {"data": 
[ 
    {"name":"Alan","height":"171","weight":"66"}, 
    {"name":"Ben","height":"182","weight":"90"}, 
    {"name":"Chris","height":"163","weight":"71"} 
] 
}; 

var new_arr = $.extend(true, arr); 

new_arr.data = $.grep(new_arr.data, function(n, i){ 
    return n.weight > 70; 
}); 

alert(new_arr.data.length); // answer is 2 

हालांकि, छानने वस्तु आवरण के बिना नहीं है ।

var arr = [ 
    {"name":"Alan","height":"171","weight":"66"}, 
    {"name":"Ben","height":"182","weight":"90"}, 
    {"name":"Chris","height":"163","weight":"71"} 
]; 

var new_arr = $.extend(true, arr); 

new_arr = $.grep(new_arr, function(n, i){ 
    return n.weight > 70; 
}); 

alert(new_arr.length); // answer is 1 instead of 2 

मुझे यकीन नहीं है कि समस्या कहां है। क्या कोई बता सकता है। धन्यवाद!

उत्तर

8

आप extend गलत तरीके से उपयोग कर रहे हैं। आप एक सरणी के साथ new_arr का विस्तार नहीं कर सकते हैं। विस्तार किसी ऑब्जेक्ट में विधियों/प्रोप जोड़ देगा लेकिन यह आपके सरणी में चलने पर कौन सी विधियों/प्रोप बनाएगा? यही कारण है कि यह ऑब्जेक्ट रैपर के साथ काम करता है: 1) एक ऑब्जेक्ट की अपेक्षा करता है और 2) 'डेटा' एक ऐसी संपत्ति है जिसे new_arry में जोड़ा जा सकता है।

बावजूद, आपके दूसरे उदाहरण में, ऐसा लगता है कि आपको कुछ भी विस्तार करने की आवश्यकता नहीं है। क्या यह काम करता है?

new_arr = $.grep(arr, function(n, i){ // just use arr 
    return n.weight > 70; 
}); 
+0

मैं अभी भी कारण पता चला :) मैं भूल गया था कि मैं क्यों पहली जगह में विस्तार का इस्तेमाल किया। ऐसा लगता है कि मुझे अब इसकी आवश्यकता नहीं है। बहुत बहुत धन्यवाद :) –

0

आप एक वस्तु अधिक गहरा करने के लिए इसका उपयोग कर सकते

var prodIds = []; 

     $.grep(this.prodOrders, function (n, i) { 

      $.grep(n.ProductionOrderLines, function (n2, i2) { 
       if (n2.ItemNo == resource) { 
        prodIds.push(n2.DocumentAbsoluteEntry); 
       } 
      }); 
     }); 
संबंधित मुद्दे