वस्तुओं की एक सरणी में संपत्ति जोड़ें


110

मेरे पास नीचे दिखाए अनुसार वस्तुओं की एक सरणी है

Object {Results:Array[2]}
     Results:Array[2]
[0-1]
0:Object
       id=1     
       name: "Rick"
1:Object
       id=2     
       name:'david'

मैं इस सरणी के प्रत्येक तत्व में सक्रिय नाम की एक और संपत्ति जोड़ना चाहता हूं।

अंतिम परिणाम निम्नानुसार होना चाहिए।

Object {Results:Array[2]}
     Results:Array[2]
[0-1]
0:Object
       id=1     
       name: "Rick"
       Active: "false"
1:Object
       id=2     
       name:'david'
       Active: "false"

क्या कोई मुझे बता सकता है कि इसे कैसे प्राप्त किया जा सकता है।


6
सरणी के माध्यम से लूप। लूप करते समय प्रत्येक ऐरे तत्व में गुण जोड़ें। आप किस हिस्से को नहीं जानते हैं कि कैसे करना है?
JJJ

जवाबों:


157

आप forEachसरणी में प्रत्येक तत्व के लिए एक बार दिए गए फ़ंक्शन को निष्पादित करने के लिए विधि का उपयोग कर सकते हैं । इस प्रदान किए गए फ़ंक्शन में आप Activeसंपत्ति को तत्व में जोड़ सकते हैं ।

Results.forEach(function (element) {
  element.Active = "false";
});

223

या उपयोग करें map

Results.map(obj=> ({ ...obj, Active: 'false' }))

मूल को म्यूट न करने के लिए @adrianolsk द्वारा टिप्पणी को प्रतिबिंबित करने के लिए संपादित किया गया है और इसके बजाय प्रत्येक के लिए एक नई वस्तु लौटाते हैं।

युक्ति पढ़ें


4
केवल ES6 में समर्थित
Amaynut

5
ES5 सटीक होने के लिए;) - लेकिन
बैबेल

51
मानचित्र को ऑब्जेक्ट को उत्परिवर्तित नहीं करने के लिए एक नया सरणी वापस करना चाहिए, इस मामले में forEach बेहतर होगा, या मानचित्र का उपयोग करें और एक नई वस्तु Results.map(obj=> ({ ...obj, Active : 'false' }))
लौटाएं

4
महान समाधान @adrianolsk, आपको एक अलग उत्तर के रूप में प्रस्तुत करना चाहिए।
माइकल हेस


1

मैं इस समस्या के खिलाफ भी आया, और इसे हल करने की कोशिश में मैं अपने ऐप को चला रहे क्रोम टैब को क्रैश करता रहा। ऐसा लगता है कि वस्तुओं के लिए प्रसार ऑपरेटर अपराधी था।

Adrianolsk की टिप्पणी और इसके बाद के संस्करण, मैं इस्तेमाल किया sidonaldson के जवाब से थोड़ी मदद के साथ Object.assign () कोलाहल से फैल ऑपरेटर के उत्पादन में है, इसलिए की तरह:

this.options.map(option => {
  // New properties to be added
  const newPropsObj = {
    newkey1:value1,
    newkey2:value2
  };

  // Assign new properties and return
  return Object.assign(option, newPropsObj);
});

0

यह एक कुंजी-मूल्य संरचना के रूप में ऑब्जेक्ट के माध्यम से जाता है। फिर यह 'सक्रिय' नाम की एक नई संपत्ति और इस संपत्ति के लिए एक नमूना मूल्य ('सक्रिय) को इस ऑब्जेक्ट के अंदर हर एक वस्तु में जोड़ देगा। यह कोड ऑब्जेक्ट्स की ऑब्जेक्ट और ऑब्जेक्ट दोनों के लिए लागू किया जा सकता है।

   Object.keys(Results).forEach(function (key){
            Object.defineProperty(Results[key], "Active", { value: "the appropriate value"});
        });

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

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