दिलचस्प पोस्ट
बेस 64 में छवि को स्ट्रिंग में कनवर्ट करें और पायथन में फाइल सिस्टम पर सहेजें एएसपी.नेट एमवीसी फ्रेमवर्क 4.5 सीएसएस बंडल होस्टिंग पर काम नहीं करता है जावा जेनेरिक्स के साथ संस्थाओं के लिए कन्वर्टर्स लागू करें क्या आप एक एम्बेडेड नल के साथ एक std :: स्ट्रिंग का निर्माण करते हैं? पायथन में वर्ग चर को परिभाषित करने का सही तरीका HTML5 के साथ ऑडियो कैप्चरिंग BitArray से बाइट में कनवर्ट करें क्या एक जावा वर्ग रनटाइम पर खुद को एक विधि जोड़ सकता है? MongoDB में विशेषताओं के साथ कई रिश्तों को प्रस्तुत करने के लिए सर्वश्रेष्ठ मॉडल यूआरएल में यूनिकोड वर्ण कैसे एक ggplot2 (पुस्तिका) का अच्छी तरह से व्याख्या करना सफलता के हैंडलर के बाहर $ एचपी वादा प्रतिक्रिया का उपयोग कैसे करें एक फ़ाइल में केवल पहली घटना को बदलने के लिए sed का उपयोग कैसे करें? वस्तुओं की क्षैतिज व्यवस्था के साथ WPF ListView? JQuery का उपयोग करते हुए एक ड्रॉपडाउन आइटम के चयनित मान प्राप्त करें

ऑरेजेस पास संदर्भ के साथ Array.prototype.fill () और नए इंस्टेंस नहीं

बस एक छोटा सा सवाल

मैं थोड़ी सी बातें कर रहा था और वह लम्बाई एक्स की एक नई सरणी को शुरु करने की कोशिश कर रहा था, जहां उस सरणी के सभी तत्व जहां मूल्य के लिए आरंभ किया गया था

var arr = new Array(x).fill(y); 

यह ठीक काम करता है यदि y का मान ऑब्जेक्ट के अलावा कुछ और है जिसका मतलब है कि y एक वस्तु है, निम्नलिखित सच है:

 var arr = new Array(2).fill({}); arr[0] === arr[1]; //is true; arr[0].test = 'string'; arr[1].test === 'string'; //is also true; 

क्या इस बात का कोई तरीका है कि भरण-समारोह का उपयोग करते समय प्रत्येक तत्व के लिए एक नया ऑब्जेक्ट बनाया जाना चाहिए? या मैं इसे सिर्फ एक पाश में बदलूँ?

अग्रिम में धन्यवाद!

Solutions Collecting From Web of "ऑरेजेस पास संदर्भ के साथ Array.prototype.fill () और नए इंस्टेंस नहीं"

आप पहले किसी भी मान (जैसे undefined ) के साथ सरणी को fill सकते हैं, और फिर आप map का उपयोग करने में सक्षम होंगे:

 var arr = new Array(2).fill().map(u => ({})); 
 var arr = new Array(2).fill().map(Object); 

स्वीकृत उत्तर अच्छा है, और 90% मामलों में काम करेगा।

लेकिन अगर आप उच्च निष्पादन जेएस आवेदन कर रहे हैं, और यदि आप बड़े / विशाल arrays के साथ काम करते हैं, तो Array.map (..) दोनों-स्मृति और प्रोसेसर उपयोग में बड़ी अधिभार बनाता है, क्योंकि यह सरणी की प्रतिलिपि बनाता है।

मैं लूप के लिए क्लासिक का उपयोग करने की सलाह देता हूं:

  a = new Array(ARRAY_SIZE); for (var i = 0; i < ARRAY_SIZE; i++) { a[i] = []; } 

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

  • प्रस्तावित उत्तर ( 11x बार !!! धीमा):

     a = new Array(ARRAY_SIZE).fill().map(u => { return []; }); 
  • सरल लूप ( सबसे तेज़ ):

     a = new Array(ARRAY_SIZE); for (var i = 0; i < ARRAY_SIZE; i++) { a[i] = []; } 
  • प्रत्येक के लिए ( 2x समय धीमा):

     a = new Array(ARRAY_SIZE).fill(); a.forEach((val, i) => { a[i] = []; }) 

पुनश्च। मैंने परीक्षण के लिए इस बेला का इस्तेमाल किया