2016-01-10 14 views
7

मैं निश्चित लंबाई के साथ खाली सरणी बनाना चाहता हूं, और फिर .map का उपयोग नई सरणी वापस करने के लिए करें। हालांकि, यह उम्मीद के रूप में काम नहीं कर रहा है।ऐरे कन्स्ट्रक्टर अपेक्षित काम नहीं कर रहा है

mdn docs के अनुसार:

केवल तर्क सरणी निर्माता के लिए पारित 0 और 232-1 (सम्मिलित) के बीच एक पूर्णांक है, तो यह लंबाई उस नंबर करने के लिए सेट के साथ एक नया JavaScript श्रृंखला देता है।

new Array(3) रिटर्न [undefined × 3]। यह नहीं होना चाहिए: [undefined, undefined, undefined]?

के निम्न उदाहरण पर विचार करें:

1) काम नहीं।

var a = new Array(3); 
a.map((x, i) => i); // [undefined × 3] 

2) कार्य।

var a = Array.apply(null, new Array(3)); 
a.map((x, i) => i); // [0, 1, 2] 

मैंने नवीनतम Google क्रोम कैनरी पर इसका परीक्षण किया।

+0

ठीक है, मैंने पहले सोचा था कि यह पागलपन था लेकिन मैं फ़ायरफ़ॉक्स में क्रोम 47.0.2526.106 मीटर आउटपुट '[अपरिभाषित × 3]' – Jonathan

+1

'ऐरे [<3 खाली स्लॉट>] 'की पुष्टि कर सकता हूं। जितना अधिक आप जानते हैं। –

+2

'नया ऐरे (3) 'तत्वों के साथ एक सरणी नहीं बनाता है, इसकी केवल एक डमी – CoderPi

उत्तर

3

MDN से: this returns a new JavaScript array with length set to that number

सरणी new Array(n) द्वारा बनाई गई किसी भी तत्व, केवल लंबाई नहीं है। यही कारण है कि आप (मौजूदा नहीं) तत्वों को मैप नहीं कर सकते हैं।

+0

[अपरिभाषित, अपरिभाषित, अपरिभाषित] .map (फ़ंक्शन (x, i) {वापसी i}) [0,1,2] लौटाता है - इस मामले में प्रत्येक मान अपरिभाषित है। नए ऐरे (3) द्वारा लगाए गए सरणी में कोई मूल्य नहीं है – CoderPi

+0

@torazaburo वास्तव में 'नया ऐरे (3) [0] 'रिटर्न' अपरिभाषित 'नहीं है, क्योंकि तत्व का कोई मूल्य नहीं है, लेकिन internaly के पास मूल्य' अपरिभाषित 'नहीं है , यह सिर्फ अस्तित्व में नहीं है .. इसलिए कुछ मामलों में ऐसा लगता है कि इसमें मानदंडों के बराबर मान हैं, लेकिन इसमें कोई तत्व नहीं है – CoderPi

+0

@torazaburo अच्छी तरह से अगर यह पूर्ववत नहीं हो रहा है तो यह मौजूदा तत्वों को कैसे छोड़ सकता है। लेकिन अगर आपको कोई अंक मिलता है तो मुझे अच्छा लगता है ^^ – CoderPi

0

CodeiSirs करने के लिए एक के अलावा एक उदाहरण का जवाब:

// foo and bar are identical. They are arrays with length 3 and no indices. 
 
var foo = new Array(3); 
 
var bar = []; 
 
bar.length = 3; 
 

 
console.log(foo); 
 
console.log(bar); 
 

 
// This is different. It has 3 indices with the value undefined. 
 
var pez = [undefined, undefined, undefined]; 
 
console.log(pez);

कंसोल प्रदर्शित करता है अजीब के new Array(3) तरह है क्योंकि यह [undefined, undefined, undefined]

1

map स्किप के अपरिभाषित तत्वों से अधिक के रूप में ही नहीं है, डिजाइन द्वारा।

documentation से:

callback केवल सरणी के अनुक्रमित जो मूल्यों

सौंपा है शुरू होता है

कई सवाल अतः इस विषय से संबंधित पर यहाँ कर रहे हैं, और बनाने के तरीके उपलब्ध कराने के सरणियों कि नक्शा के सभी तत्वों पर कार्यवाही करेंगे, इस तरह के

new Array(3) . fill() . map(... 

के रूप में बस लेने के लिए ओ नया उदाहरण, नई ऐरे # भरने विधि का उपयोग कर।

+0

उन सूचकांकों के बीच एक अंतर है जिनके पास अपरिभाषित और अपरिभाषित सूचकांक का मूल्य है ... – Jonathan

+0

हां, अच्छा बिंदु। बाद में 'नक्शा' छोड़ देता है, लेकिन न ही पूर्व, जैसा प्रलेखन में स्पष्ट किया गया है, जो कहता है "सरणी के अनुक्रमांक जो मान निर्दिष्ट किए गए हैं, अपरिभाषित समेत"। यह वास्तव में क्यों 'भरें' काम करता है। यह प्रत्येक तत्व को मान 'अपरिभाषित' असाइन करता है। –

+0

मुझे नहीं लगता कि ओपी पर आपकी टिप्पणी सही है, '[अपरिभाषित × 3] 'नहीं है [अपरिभाषित, अपरिभाषित, अपरिभाषित]'। पहला नोटेशन इंगित करता है कि सूचकांक – Jonathan

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