लूप में ऑब्जेक्ट लीटर का एक सरणी कैसे बनाएं?


224

मुझे इस तरह की वस्तु शाब्दिक सारणी बनाने की आवश्यकता है:

var myColumnDefs = [
    {key:"label", sortable:true, resizeable:true},
    {key:"notes", sortable:true,resizeable:true},......

इस तरह एक पाश में:

for (var i = 0; i < oFullResponse.results.length; i++) {
    console.log(oFullResponse.results[i].label);
}

सरणी के प्रत्येक तत्व में मान keyहोना चाहिए results[i].label

जवाबों:


395
var arr = [];
var len = oFullResponse.results.length;
for (var i = 0; i < len; i++) {
    arr.push({
        key: oFullResponse.results[i].label,
        sortable: true,
        resizeable: true
    });
}

18
आप var obj = {थोड़ा छोड़ सकते हैं , बस शाब्दिक को धक्का दे सकते हैं ।
पीटर बैली

3
केवल एक बार लंबाई की गणना करना शायद एक अच्छा विचार है, मैं var objकोड को स्पष्ट करने के लिए एक जोड़ने का चयन करता हूं , निश्चित रूप से आप इसे छोड़ सकते हैं, यदि आप चाहें तो पूरी स्क्रिप्ट एक पंक्ति में लिख सकते हैं :)
RaYell

3
@कांगैक्स, लंबाई "गणना" नहीं है, यह एक ओ (1) ऑपरेशन है।
त्रिफलक

8
@ ट्रीपिक - हां, लेकिन यह एक संपत्ति खोज है जिसे आप प्रत्येक पुनरावृत्ति के साथ निष्पादित करते हैं, जो मुफ़्त नहीं है और इससे बचा जा सकता है। माइक्रो अनुकूलन? संभवतः। इसके अलावा, यह एक "लाइव" मूल्य है - यदि आप लूप में सरणी को संशोधित करते हैं, तो लंबाई क्रमिक पुनरावृत्तियों पर बदल जाएगी जिससे अनन्तता हो सकती है। इसे एक घड़ी youtube.com/watch?v=mHtdZgou0qU
पीटर बैली

2
हाँ, लेकिन आप प्रत्येक पुनरावृत्ति सरणी को संशोधित नहीं कर रहे हैं। यदि आप थे, तो ज्यादातर मामलों में लंबाई के खिलाफ तुलना करना हास्यास्पद होगा।
त्रिफलक

61

RaYell का उत्तर अच्छा है - यह आपके प्रश्न का उत्तर देता है।

हालांकि मुझे लगता है कि आपको वास्तव में मानों के रूप में उप-ऑब्जेक्ट्स के साथ लेबल के द्वारा एक ऑब्जेक्ट बनाना चाहिए:

var columns = {};
for (var i = 0; i < oFullResponse.results.length; i++) {
    var key = oFullResponse.results[i].label;
    columns[key] = {
        sortable: true,
        resizeable: true
    };
}

// Now you can access column info like this. 
columns['notes'].resizeable;

उपरोक्त दृष्टिकोण प्रत्येक पहुंच के लिए एक कुंजी के लिए संपूर्ण ऑब्जेक्ट सरणी को खोजने की तुलना में बहुत तेज़ और मुहावरेदार होना चाहिए।


+1 कुंजी समाधान के बाद से, अधिक समझ में आता है और मेरी जरूरतों के साथ मेरी मदद करता है :)
विजेता_जॉइनर

ऐसा लगता है कि आप var कुंजी सेट करने के बाद एक अर्ध-कॉलन को याद कर रहे हैं?
सुपर

अच्छा जवाब, थोड़ी देर के लिए जानकारी का उपयोग कैसे करना है, इसके लिए धन्यवाद, धन्यवाद
thatOneGuy

क्या होगा अगर कुंजी को एक से अधिक बार होने की आवश्यकता है! ['नोट्स'] एक से अधिक बार हो सकता है तो हम क्या कर सकते हैं?
मिल्सन

1
Milson - कि मामले में, यह वास्तव में एक "कुंजी" है
त्रिफलक




4

निक रिग्स के एक ही विचार में लेकिन मैं एक निर्माता का निर्माण करता हूं, और इसका उपयोग करके सरणी में एक नई वस्तु को धक्का देता हूं। यह कक्षा की चाबियों के दोहराव से बचता है:

var arr = [];
var columnDefs = function(key, sortable, resizeable){
    this.key = key; 
    this.sortable = sortable; 
    this.resizeable = resizeable;
    };

for (var i = 0; i < len; i++) {
    arr.push((new columnDefs(oFullResponse.results[i].label,true,true)));
}

3

मैं एरे बनाऊंगा और फिर ऑब्जेक्ट वेंडल्स को उसमें जोड़ दूंगा।

var myColumnDefs = [];

for ( var i=0 ; i < oFullResponse.results.length; i++) {

    console.log(oFullResponse.results[i].label);
    myColumnDefs[myColumnDefs.length] = {key:oFullResponse.results[i].label, sortable:true, resizeable:true};
}

3
var myColumnDefs = new Array();

for (var i = 0; i < oFullResponse.results.length; i++) {
    myColumnDefs.push({key:oFullResponse.results[i].label, sortable:true, resizeable:true});
}

7
इसके []बजाय एक सरणी का उपयोग करना बेहतर है new Array()
रात

दिलचस्प चर्चा [] बनाम नई सरणी () stackoverflow.com/questions/7375120/...
एड्रियन पी

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.