मेरे पास एक साधारण सरणी है जिसे सॉर्ट करने का प्रयास करने में मुझे सबसे कठिन समय हो रहा है। मैं सोच रहा हूं कि शायद यह समय प्रारूप के कारण है, इसलिए मैं अनिश्चित हूं कि इसका संदर्भ कैसे दिया जाए या मैं इस सरणी प्रारूप में समय को कैसे क्रमबद्ध कर सकता हूं, ताकि मैं इसे बाद में क्रमबद्ध कर सकूं।
// फ़ंक्शन इनपुट मानों के लिए बनाया गया फ़ंक्शन पुट (कुंजी, मान, obj) {obj [कुंजी] = मान; वापसी ओबीजे}
//loads the document from ajax call
function loadDoc() {
//ajax call
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var data = xhttp.responseText;
//input data from webpage into dom element
document.getElementById('next').innerHTML = data
var test = document.getElementsByClassName('gridRow')
//create dict
var new_dict = {}
for(a=0;a<test.length;a++){
if(test[a].children[2].innerText == 'Ready') {
test[a].style.display = 'none';
//drops into the dictionary
put(String(test[a].children[0].innerText).replace(/\n/ig, ''),
test[a].children[3].innerText, new_dict)
}
}
document.getElementById('next').innerHTML = ''
//looping through the dict
for(var index in new_dict) {
document.getElementById('next').innerHTML += ("<br>" + index + " : " +
new_dict[index] + "<br>");
}
आउटपुट वही क्रम है जो नाम दिखाई देते हैं।
3 जवाब
जिस तरह से आपकी सरणी आबादी लगती है, और सरल समाधान के लिए जा रही है: आप समय मान को सामान्य क्यों नहीं करते हैं जैसे कि आपने उचित रूप से 0s पूर्व-लंबित किया है?
"जॉन डो": "00:19:57" "गाय फॉक्स": "00:36:40" "चार्ल्स शीन": "01:35:37"
जो कुछ भी बना रहा है new_dict
वह गलत तरीके से बना रहा है। यह एक सरणी है, लेकिन इसे बनाने वाला कोड इसे एक सादे वस्तु की तरह उपयोग कर रहा है। मैं इसे ठीक कर दूंगा ताकि यह, उदाहरण के लिए, वस्तुओं की एक सरणी हो।
लेकिन आपकी वर्तमान संरचना के साथ:
यदि आप गुण नामों द्वारा वर्णानुक्रम में इसके गुणों के माध्यम से लूप करना चाहते हैं, तो आप कुंजी प्राप्त करने और इसे सॉर्ट करने के लिए Object.keys
का उपयोग कर सकते हैं, फिर परिणाम के माध्यम से लूप map
आउटपुट बनाकर:
document.getElementById('next').innerHTML = Object.keys(new_dict)
.sort((a, b) => a.localeCompare(b)) // Sorts lexicographically (loosely, "alphabetically")
.map(key => escapeHTML(key + ": " + new_dict[key]))
.join("<br>"); // Joins them with <br> in-between
}
...जहाँ escapeHTML
, &
और <
को एन्कोड करता है, क्योंकि आप HTML जेनरेट कर रहे हैं। एक त्वरित और गंदा संस्करण (जो उपरोक्त के लिए काफी अच्छा है) कुछ ऐसा होगा:
// ONLY good enough to handle text that isn't in attributes
function escapeHTML(str) {
return str.replace(/&/g, "&").replace(/</g, "<");
}
यह एक शब्दकोश है, एक सरणी नहीं। नामों को "कुंजी" के रूप में संदर्भित करना अधिक सटीक होगा, न कि "अनुक्रमणिका"। विशेष रूप से, आपके यहां जो शब्दकोश है, वह समय पर नामों को मैप करता है। वैसे भी, एक चीज जो आप कर सकते हैं वह है एक नया शब्दकोश बनाना जो समय को नामों की सूची में मैप करता है (क्योंकि कई नामों में एक ही समय हो सकता है)। फिर उस शब्दकोश की कुंजियों को क्रमबद्ध करें।