2013-10-14 16 views
5

मेरे पास जावास्क्रिप्ट में एक सरणी है जिसमें बहुत सारे एरे हैं। यह समझने का सबसे अच्छा/सरल तरीका क्या होगा कि सरणी कितनी बिट्स/बाइट्स रखती है? मैं अपने PHP सर्वर पर सरणी भेज रहा हूं, और यह केवल 5kB बड़ा हो सकता है।सरणी बिट/बाइट आकार सरणी

क्या इसके लिए कोई मूल तरीका है? मैं बिट्स से बहुत अच्छी तरह से परिचित नहीं हूँ। अगर मैं इसे सही ढंग से समझता हूं तो 1 वर्ण 8 बी/1 बी में फिट बैठता है (हालांकि यह स्पष्ट रूप से एन्कोडिंग पर निर्भर करता है)। क्या सभी सरणी के माध्यम से लूप करना और पात्रों की गिनती करना सबसे अच्छा तरीका होगा?

var g = JSON.stringify(myBigNestedarray).replace(/[\[\]\,\"]/g,''); //stringify and remove all "stringification" extra data 
alert(g.length); //this will be your length. 

उदाहरण के लिए (क्रम बहुत अच्छा अनुमान प्राप्त करने के लिए):

उत्तर

7

सबसे पहले आपको सरणी को सर्वर पर डेटा संचारित करने के लिए प्रयुक्त स्ट्रिंग प्रस्तुति में परिवर्तित करना होगा। सरणी का आकार कोई फर्क नहीं पड़ता क्योंकि यह वह स्ट्रिंग होगी जो प्रसारित की जाएगी। उस सरणी को क्रमबद्ध करने के तरीके के आधार पर, आकार अंतर बहुत महत्वपूर्ण हो सकता है।

सरणी को क्रमबद्ध करने के संभावित विकल्प jQuery.param() विधि या JSON.stringify() हैं। आप अपनी खुद की विधि भी बना सकते हैं जो मानों को परिवर्तित करता है ताकि आपका PHP कोड इसे समझ सके।

आपके पास यह स्ट्रिंग होने के बाद, आप आकार प्राप्त करने के लिए stringValue.length * 8 लेते हैं, यह मानते हुए कि ए) मान ASCII या बी हैं) आप सभी मानों को url-encoded ताकि यूनिकोड वर्ण ASCII में परिवर्तित हो जाएं। बिट्स प्राप्त करने के लिए *8 है, लेकिन चूंकि आप उल्लेख करते हैं कि सीमा 5kB है - जो संभवतः बाइट हैं, इसलिए आप गुणा को छोड़ दें।

+0

'jQuery.param' दस्तावेज़ों का उद्धरण: "नोट: क्योंकि परम तारों के लिए कोई सार्वभौमिक रूप से सहमत विनिर्देश नहीं है, इसलिए इस विधि का उपयोग करके जटिल डेटा संरचनाओं को एन्कोड करना संभव नहीं है जो आदर्श रूप से ऐसे सभी भाषाओं में काम करता है इनपुट। इसके बजाय जेएसओएन प्रारूप का उपयोग एन्कोडिंग जटिल डेटा के विकल्प के रूप में करें। " – Prinzhorn

+0

ओप जानना चाहता है कि सरणी ** कितने बाइट ** रखती है। आपका समाधान उन अतिरिक्त वर्णों पर विचार नहीं करता है जो सरणी '[] 'और' "' आदि का प्रतिनिधित्व करते हैं ... इसलिए आपके समाधान के अनुसार - '[1]' की लंबाई 3 है जो गलत है (इसकी लंबाई 1 है)। –

+0

@ रॉयनामिर यही वह कहता है, लेकिन मुझे नहीं लगता कि उसका मतलब यही है। अगर वह केवल सर्वर पर 5 केबी स्थानांतरित कर सकता है, तो धारावाहिक डेटा की लंबाई की गणना होती है। और '[1]' की लंबाई 8 है, क्योंकि जावास्क्रिप्ट '1' को 64 बिट आईईईई 754 फ्लोटिंग पॉइंट नंबर के रूप में स्टोर करता है। आप देखते हैं, उसका प्रश्न संदिग्ध है। – Prinzhorn

4

आप ऐसा कर सकते हैं

var g=[1,2,3,['a','b',['-','+','&'],5],['שלום','יגבר']]

JSON.stringify(g).replace(/[\[\]\,\"]/g,'')

"123ab-+&5שלוםיגבר" 
: इस नेस्टेड सरणी पर alook है

इसकी लंबाई क्या है: 17 (बाइट्स)

इस तरह - और फिर अतिरिक्त सरणी धारकों को दूर - आप json.parse के लाभ के जो काम के सबसे अधिक है का उपयोग करें।

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