2016-11-22 4 views
11

मान लीजिए कि मैं एक उपयोगकर्ता स्क्रिप्ट डेवलपर हूं और मेरे पास ऑन-पेज जावास्क्रिप्ट पर नियंत्रण नहीं है। पृष्ठ यादृच्छिक लंबाई के साथ सरणी बनाता है, उन्हें यादृच्छिक मूल्यों (जैसे falsy सहित, undefined सहित) भरना। प्रत्येक तत्व को एक मान असाइन नहीं किया जाना चाहिए, इसलिए खाली स्लॉट हो सकते हैं।अपरिभाषित सरणी तत्वों और खाली स्लॉट के बीच कैसे बताना है?

एक सरल उदाहरण (फ़ायरफ़ॉक्स कंसोल):

var arr = new Array(3); 
arr[0] = null; 
arr[1] = undefined; 
console.log(arr);    \\ Array [ null, undefined, <1 empty slot> ] 
console.log(arr[1]);   \\ undefined 
console.log(arr[2]);   \\ undefined 
console.log(arr[1] === arr[2]); \\ true 
console.log(typeof arr[1]);  \\ undefined 
console.log(typeof arr[2]);  \\ undefined 

हम देख सकते हैं, फायरफॉक्स अलग ढंग से undefined और खाली स्लॉट को प्रदर्शित करता है, जबकि जावास्क्रिप्ट के लिए वे समान होने लगते हैं।

अब मान लीजिए कि मैं इस तरह की एक सरणी को साफ करना चाहता हूं, सभी खाली स्लॉट को हटा रहा हूं लेकिन undefined तत्वों को बरकरार रखता हूं। मैं उसको कैसे करू?

+1

क्या खाली स्लॉट का मतलब है? क्या आप एक नई सरणी चाहते हैं? –

उत्तर

15

आप in ऑपरेटर का उपयोग यह जांचने के लिए कर सकते हैं कि सरणी में कोई कुंजी है या नहीं। यह मूल्यों के साथ स्लॉट के लिए खाली स्लॉट के लिए झूठी, लेकिन सच है वापस आ जाएगी, मूल्य undefined सहित:

var arr = new Array(3); 
arr[0] = null; 
arr[1] = undefined; 

1 in arr; // true 
2 in arr; // false 

ध्यान दें कि आप सरणी के अंत अतीत खाली स्लॉट और स्लॉट के बीच अंतर नहीं कर पाते का उपयोग कर, लेकिन अगर आप सरणी की लंबाई जानते हैं, तो आप पहले से ही जानते हैं कि 3 इसका हिस्सा नहीं है, इसलिए आपको 3 in arr का परीक्षण करने की आवश्यकता नहीं है।

आप भी इस तरह खाली स्लॉट को फ़िल्टर कर सकते हैं:

arr = arr.filter(function (_, i) { return i in arr }); 
+1

वाह यह चालाक है। – Harangue

3

आप Array#forEach, जो विरल तत्वों को छोड़ देता है इस्तेमाल कर सकते हैं।

var arr = new Array(3); 
 
arr[0] = null; 
 
arr[1] = undefined; 
 
console.log(arr); 
 

 
var withoutSparse = []; 
 

 
arr.forEach(function (a, i) { 
 
    console.log(i); 
 
    withoutSparse.push(a); 
 
}); 
 
console.log(withoutSparse);
.as-console-wrapper { max-height: 100% !important; top: 0; }

संबंधित मुद्दे