मैं जावास्क्रिप्ट ऑब्जेक्ट में एक कुंजी / मूल्य जोड़ी कैसे जोड़ सकता हूं?


1382

यहाँ मेरी वस्तु शाब्दिक है:

var obj = {key1: value1, key2: value2};

मैं ऑब्जेक्ट के key3साथ फ़ील्ड कैसे जोड़ सकता हूं value3?


2
खैर, जेएस में साहचर्य सरणियों का पूरा मुद्दा अजीब है, क्योंकि आप ऐसा कर सकते हैं ... dreaminginjavascript.wordpress.com/2008/06/27/…
Nosredna

@ नोसेरेडना - बात यह है कि, जावास्क्रिप्ट में साहचर्य सरणियों जैसी कोई चीज नहीं है। उस लेख में वह एक सरणी ऑब्जेक्ट में ऑब्जेक्ट गुण जोड़ रहा है, लेकिन ये वास्तव में 'सरणी' का हिस्सा नहीं हैं।
UpTheCreek

क्या सशर्त रूप से सेट कुंजी का एक तरीका है: भविष्य ईएस + कार्यान्वयन के साथ एक वस्तु शाब्दिक में मूल्य जोड़े?
कोन एंटोनकोस

जवाबों:


2252

किसी वस्तु में नए गुण जोड़ने के दो तरीके हैं :

var obj = {
    key1: value1,
    key2: value2
};

डॉट संकेतन का उपयोग करना:

obj.key3 = "value3";

वर्ग ब्रैकेट संकेतन का उपयोग करना:

obj["key3"] = "value3";

प्रॉपर्टी का नाम पता होने पर पहले फॉर्म का इस्तेमाल किया जाता है। दूसरे रूप का उपयोग तब किया जाता है जब संपत्ति का नाम गतिशील रूप से निर्धारित होता है। इस उदाहरण में पसंद करें:

var getProperty = function (propertyName) {
    return obj[propertyName];
};

getProperty("key1");
getProperty("key2");
getProperty("key3");

एक वास्तविक जावास्क्रिप्ट सरणी का निर्माण किया जा सकता है:

ऐरे शाब्दिक अंकन:

var arr = [];

ऐरे कंस्ट्रक्टर नोटेशन:

var arr = new Array();

4
obj एक वस्तु है। ब्रेसिज़ के बीच (और शामिल) वस्तु शाब्दिक है। obj एक वस्तु शाब्दिक नहीं है।
नास्त्रेदना

24
क्या होगा यदि कुंजी एक संख्या है? obj.123 = 456 काम नहीं करता है। obj [123] = 456 हालांकि काम करता है
एक्सल फ्रायडिगर

10
@axelfreudiger वास्तव में, ऐसा कुछ भी नहीं जो वाक्य-रचना के लिए मान्य चर पहचानकर्ता का उपयोग ब्रैकेट संकेतन के साथ किया जाना है।
इओनु

1
@ काइलखलफ़Object.keys({"b": 1, "c": 3, "a": 2}).sort().forEach(console.log);
जी। स्टेन

2
@ जॉनसन lengthसंपत्ति सेट नहीं है क्योंकि यह एक सरणी नहीं है, यह एक वस्तु / नक्शा / शब्दकोश है।
इओनु:

344

वर्ष 2017 का उत्तर: Object.assign()

Object.assign (dest, src1, src2, ...) ऑब्जेक्ट्स को मर्ज करता है।

यह dest(हालांकि कई) स्रोत वस्तुओं के गुणों और मूल्यों के साथ ओवरराइट करता है, फिर लौटता है dest

Object.assign()विधि लक्ष्य वस्तु के लिए एक या अधिक स्रोत वस्तुओं से सभी गणनीय खुद गुण के मूल्यों की प्रतिलिपि करने के लिए किया जाता है। यह लक्ष्य वस्तु को लौटा देगा।

जीवंत उदाहरण

var obj = {key1: "value1", key2: "value2"};
Object.assign(obj, {key3: "value3"});

document.body.innerHTML = JSON.stringify(obj);

वर्ष 2018 उत्तर: वस्तु प्रसार ऑपरेटर {...}

obj = {...obj, ...pair};

से MDN :

यह एक नई वस्तु पर प्रदान की गई वस्तु से खुद के अनगिनत गुणों को कॉपी करता है।

उथला-क्लोनिंग (प्रोटोटाइप को छोड़कर) या वस्तुओं के विलय से अब एक छोटे वाक्यविन्यास का उपयोग करना संभव है Object.assign()

ध्यान दें कि Object.assign()चलाता setters जबकि प्रसार वाक्य रचना नहीं करता है।

जीवंत उदाहरण

यह वर्तमान क्रोम और वर्तमान फ़ायरफ़ॉक्स में काम करता है। वे कहते हैं कि यह वर्तमान एज में काम नहीं करता है।

var obj = {key1: "value1", key2: "value2"};
var pair = {key3: "value3"};
obj = {...obj, ...pair};

document.body.innerHTML = JSON.stringify(obj);

वर्ष 2019 उत्तर

ऑब्जेक्ट असाइनमेंट ऑपरेटर += :

obj += {key3: "value3"};

उफ़ ... मैं बह गया। भविष्य से तस्करी की जानकारी अवैध है। विधिवत रूप से अस्पष्ट!


33
obj + = बहुत अच्छा लग रहा है
मेहरदाद शोखरी

2
phpstorm का उपयोग करने की अनुशंसा करता है constऔर letइसके बजाय var, 2018 का तरीका होना चाहिए?
जिम स्मिथ

@ जिस्मिथ: यकीन नहीं होता कि आप यहां ऐसा क्यों कह रहे हैं। क्या आप मेरी राय चाहते हैं? एक दुभाषिया का लाभ कंसोल में लाइव सब कुछ बदलने की क्षमता है। मैं शौकीन नहीं हूं constक्योंकि यह उस लाभ को दूर करता है। हर बार जब मैंने इसका इस्तेमाल किया, तो इससे विकास बाधित हुआ।
7vujy0f0hy

हम 2019 में हैं, क्या इसका मतलब यह है कि असाइनमेंट ऑपरेटर को पहले से ही प्रसार ऑपरेटर को बदलने के लिए इस्तेमाल किया जा सकता है?
श्री-कार्यक्रम

1
एक सच्चा प्रोग्रामर कभी भी तनावपूर्ण पेशे को राहत देने के लिए कुछ मजेदार का महत्व देगा। आपका Year 2019 answer ... Opps ...भाग धन्यवाद का पात्र है , आपने मेरा दिन बना दिया । सर्वश्रेष्ठ उत्तर +1
कॉलिनवा

89

मैं बड़ा प्रोजेक्ट लिखते समय LoDash / अंडरस्कोर के शौकीन हो गए हैं।

जोड़कर obj['key']या obj.keyसभी ठोस शुद्ध जावास्क्रिप्ट उत्तर हैं। हालाँकि, दोनों LoDash और Underscore लाइब्रेरी सामान्य रूप से ऑब्जेक्ट्स और Arrays के साथ काम करते समय कई अतिरिक्त सुविधाजनक कार्य प्रदान करते हैं।

.push()Arrays के लिए है , वस्तुओं के लिए नहीं ।

आप जिस चीज की तलाश कर रहे हैं, उसके आधार पर, दो विशिष्ट कार्य हैं जो उपयोग करने के लिए अच्छा हो सकते हैं और महसूस करने के लिए कार्यक्षमता के समान दे सकते हैं arr.push()। अधिक जानकारी के लिए डॉक्स की जांच करें, उनके पास कुछ बेहतरीन उदाहरण हैं।

_.मरेज (केवल लोडश)

दूसरी वस्तु आधार ऑब्जेक्ट को अधिलेखित या जोड़ देगी। undefinedमूल्यों की नकल नहीं की जाती है।

var obj = {key1: "value1", key2: "value2"};
var obj2 = {key2:"value4", key3: "value3", key4: undefined};
_.merge(obj, obj2);
console.log(obj);
// → {key1: "value1", key2: "value4", key3: "value3"} 

_.extend / _.assign

दूसरी वस्तु आधार ऑब्जेक्ट को अधिलेखित या जोड़ देगी। undefinedनकल होगी।

var obj = {key1: "value1", key2: "value2"};
var obj2 = {key2:"value4", key3: "value3", key4: undefined};
_.extend(obj, obj2);
console.log(obj);
// → {key1: "value1", key2: "value4", key3: "value3", key4: undefined}

_.defaults

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

var obj = {key3: "value3", key5: "value5"};
var obj2 = {key1: "value1", key2:"value2", key3: "valueDefault", key4: "valueDefault", key5: undefined};
_.defaults(obj, obj2);
console.log(obj);
// → {key3: "value3", key5: "value5", key1: "value1", key2: "value2", key4: "valueDefault"}

$ .extend

इसके अलावा, यह jQuery.extend का उल्लेख करने योग्य हो सकता है, यह _.merge के समान कार्य करता है और यदि आप पहले से ही jQuery का उपयोग कर रहे हैं तो यह एक बेहतर विकल्प हो सकता है।

दूसरी वस्तु आधार ऑब्जेक्ट को अधिलेखित या जोड़ देगी। undefinedमूल्यों की नकल नहीं की जाती है।

var obj = {key1: "value1", key2: "value2"};
var obj2 = {key2:"value4", key3: "value3", key4: undefined};
$.extend(obj, obj2); 
console.log(obj);
// → {key1: "value1", key2: "value4", key3: "value3"}

Object.assign ()

यह ES6 / ES2015 Object.assign उल्लेख के लायक है, यह _.merge के समान कार्य और सबसे अच्छा विकल्प हो सकता है अगर आप पहले से ही एक ES6 / ES2015 polyfill की तरह प्रयोग कर रहे हैं हो सकता है कोलाहल यदि आप चाहते हैं अपने आप को polyfill

दूसरी वस्तु आधार ऑब्जेक्ट को अधिलेखित या जोड़ देगी। undefinedनकल होगी।

var obj = {key1: "value1", key2: "value2"};
var obj2 = {key2:"value4", key3: "value3", key4: undefined};
Object.assign(obj, obj2); 
console.log(obj);
// → {key1: "value1", key2: "value4", key3: "value3", key4: undefined}

मेरा मानना ​​है कि _.merge अब _.extend (गंतव्य, अन्य)
AD

आह, तुम सही हो, _.extendएक अधिक सार्वभौमिक उपनाम है क्योंकि अंडरस्कोर लाइब्रेरी अभी भी उपयोग extendनहीं कर रहा है merge। मैं अपना जवाब अपडेट करूंगा।
सर.नथन स्टासन

66

आप इनमें से किसी एक का उपयोग कर सकते हैं (बशर्ते की 3 एक्यूट कुंजी है जिसे आप उपयोग करना चाहते हैं)

arr[ 'key3' ] = value3;

या

arr.key3 = value3;

यदि की 3 एक चर है, तो आपको यह करना चाहिए:

var key3 = 'a_key';
var value3 = 3;
arr[ key3 ] = value3;

इसके बाद, अनुरोध करने arr.a_keyपर value3, एक शाब्दिक मूल्य वापस आ जाएगा 3


7
यह एक सरणी नहीं बल्कि एक वस्तु है। जेएस सरणियों को केवल पूर्णांक द्वारा अनुक्रमित किया जाता है। Arr.length करने की कोशिश करें और यह वापस आ जाएगी। 0. इसके बारे में अधिक पढ़ना: कम-broken.com/blog/2010/12/…
DevAntoine

@ DevAntoine का लिंक सुलभ नहीं है। यदि आप इस सरणी प्रकार की "लंबाई" प्राप्त करना चाहते हैं, तो उपयोग करें: Object.keys (your_array) .length इस समस्या के बारे में अधिक पढ़ने के लिए, देखें: stackoverflow.com/questions/21356880/array-length-returns-0
Thế Anh Nguyễn

कोई भी उनके द्वारा बनाई गई सरणी की लंबाई संपत्ति को सरल कर सकता है। Var myarray सेट करना ["लंबाई"] = numArrayFields मेरे लिए इस समस्या को हल करता है। यह मानकर कि आप अपने क्षेत्र को किसी भी तरह से जोड़ रहे हैं, उन क्षेत्रों की संख्या पर नज़र रख रहे हैं।
जॉन स्मिथ

30
arr.key3 = value3;

क्योंकि आपकी गिरफ्तारी वास्तव में एक सरणी नहीं है ... यह एक प्रोटोटाइप ऑब्जेक्ट है। वास्तविक सरणी होगी:

var arr = [{key1: value1}, {key2: value2}];

लेकिन यह अभी भी सही नहीं है। यह वास्तव में होना चाहिए:

var arr = [{key: key1, value: value1}, {key: key2, value: value2}];

25
var employees = []; 
employees.push({id:100,name:'Yashwant',age:30});
employees.push({id:200,name:'Mahesh',age:35});

22
यह सरणियों के लिए है, वस्तुओं के लिए नहीं।
रोली

12

बस गुण जोड़ने:

और हम prop2 : 2इस ऑब्जेक्ट में जोड़ना चाहते हैं, ये सबसे सुविधाजनक विकल्प हैं:

  1. डॉट ऑपरेटर: object.prop2 = 2;
  2. वर्ग कोष्ठक: object['prop2'] = 2;

तो हम कौन सा उपयोग करते हैं?

डॉट ऑपरेटर अधिक स्वच्छ वाक्यविन्यास है और इसे डिफ़ॉल्ट (imo) के रूप में उपयोग किया जाना चाहिए। हालांकि, डॉट ऑपरेटर किसी ऑब्जेक्ट में डायनेमिक कुंजियों को जोड़ने में सक्षम नहीं है, जो कुछ मामलों में बहुत उपयोगी हो सकता है। यहाँ एक उदाहरण है:

const obj = {
  prop1: 1
}

const key = Math.random() > 0.5 ? 'key1' : 'key2';

obj[key] = 'this value has a dynamic key';

console.log(obj);

वस्तुओं को जोड़ना:

जब हम 2 वस्तुओं के गुणों को मिलाना चाहते हैं तो ये सबसे सुविधाजनक विकल्प हैं:

  1. Object.assign(), एक लक्ष्य वस्तु को एक तर्क के रूप में लेता है, और एक या अधिक स्रोत ऑब्जेक्ट और उन्हें एक साथ मर्ज करेगा। उदाहरण के लिए:

const object1 = {
  a: 1,
  b: 2,
};

const object2 = Object.assign({
  c: 3,
  d: 4
}, object1);

console.log(object2);

  1. ऑब्जेक्ट प्रसार ऑपरेटर ...

const obj = {
  prop1: 1,
  prop2: 2
}

const newObj = {
  ...obj,
  prop3: 3,
  prop4: 4
}

console.log(newObj);

हम कौन सा उपयोग करते हैं?

  • स्प्रेड सिंटैक्स कम क्रिया है और इसे डिफ़ॉल्ट इमो के रूप में उपयोग किया जाना चाहिए। इस सिंटैक्स को सिंटैक्स में ट्रांसफ़ाइल करना न भूलें, जो सभी ब्राउज़रों द्वारा समर्थित है क्योंकि यह अपेक्षाकृत नया है।
  • Object.assign() अधिक गतिशील है क्योंकि हमारे पास सभी वस्तुओं तक पहुंच है जो तर्क के रूप में पारित हो जाते हैं और नई वस्तु को सौंपे जाने से पहले उन्हें हेरफेर कर सकते हैं।

1
आपकी पोस्ट के शीर्ष पर: वे घुंघराले ब्रैकेट नहीं बल्कि वर्गाकार कोष्ठक हैं।
ब्रैम वनरॉय

11

मुझे पता है कि इसके लिए पहले से ही एक स्वीकृत उत्तर है, लेकिन मैंने सोचा कि मैं अपने विचार को कहीं दस्तावेज करूँगा। कृपया [लोग] इस विचार में छेद करने के लिए स्वतंत्र महसूस करें, क्योंकि मुझे यकीन नहीं है कि यह सबसे अच्छा समाधान है ... लेकिन मैंने इसे कुछ मिनट पहले एक साथ रखा था:

Object.prototype.push = function( key, value ){
   this[ key ] = value;
   return this;
}

आप इसे इस तरह से उपयोग करेंगे:

var obj = {key1: value1, key2: value2};
obj.push( "key3", "value3" );

चूंकि, प्रोटोटाइप फ़ंक्शन वापस आ रहा है thisआप .pushअपने objचर के अंत तक श्रृंखला जारी रख सकते हैं :obj.push(...).push(...).push(...);

एक अन्य विशेषता यह है कि आप एक फ़ंक्शन या किसी अन्य ऑब्जेक्ट को पुश फ़ंक्शन के तर्क में मान के रूप में पास कर सकते हैं। एक कामकाजी उदाहरण के लिए मेरी फिडेल देखें: http://jsfiddle.net/7tEme/


शायद यह एक अच्छा समाधान नहीं है, मुझे jquery1.9 में त्रुटियां होने लगती हैं: TypeError: 'undefined' is not a function (evaluating 'U[a].exec(s)')जो अजीब है क्योंकि यह jqufiddle में jquery1.9 के साथ भी काम करता है
दुखद माइक्रोवेव

3
आपको Object.prototype का विस्तार नहीं करना चाहिए; यह जावास्क्रिप्ट के "ऑब्जेक्ट-एज़-हैशटैब" सुविधा को तोड़ता है (और बाद में बहुत सारे पुस्तकालय जैसे कि Google मैप्स जेएस एपीआई)। चर्चा देखें: stackoverflow.com/questions/1827458/…
जस्टिन आर।

11

प्रदर्शन

आज 2020.01.14 मैं चुने हुए समाधानों के लिए Chrome v78.0.0, Safari v13.0.4 और Firefox v71.0.0 पर MacOs HighSierra 10.13.6 पर परीक्षण करता हूं। मैं उत्परिवर्तनीय (प्रथम अक्षर M) और अपरिवर्तनीय (पहला अक्षर I) के समाधानों को विभाजित करता हूं। मैं कुछ अपरिवर्तनीय समाधान भी प्रदान करता हूं (आईबी, आईसी, आईडी / आईई) अभी तक इस प्रश्न के उत्तर में प्रकाशित नहीं हुआ है

निष्कर्ष

  • सबसे तेज़ परिवर्तनशील समाधान सबसे तेज़ अपरिवर्तनीय (> 10x) से बहुत तेज़ हैं
  • क्लासिक म्यूटेबल अप्रोच जैसे obj.key3 = "abc"(MA, MB) सबसे तेज है
  • अपरिवर्तनीय समाधानों के लिए ( {...obj, key3:'abc'}और Object.assignIA, IB) सबसे तेज़ हैं
  • आश्चर्यजनक रूप से क्रोम (MC-IA) और सफारी (MD-IB) के लिए कुछ परिवर्तनशील समाधानों की तुलना में तेजी से अपरिवर्तनीय समाधान हैं

यहां छवि विवरण दर्ज करें

विवरण

नीचे दिए गए स्निपेट में, निर्धारित परीक्षण समाधान हैं, आप अपनी मशीन पर परीक्षण कर सकते हैं यहां

यहां छवि विवरण दर्ज करें


9

आप @ Ionu Stan G. Stan के उत्तर के साथ एक वर्ग बना सकते हैं

function obj(){
    obj=new Object();
    this.add=function(key,value){
        obj[""+key+""]=value;
    }
    this.obj=obj
}

अंतिम वर्ग के साथ एक नई वस्तु बनाना:

my_obj=new obj();
my_obj.add('key1', 'value1');
my_obj.add('key2', 'value2');
my_obj.add('key3','value3');

वस्तु को छापना

console.log(my_obj.obj) // Return {key1: "value1", key2: "value2", key3: "value3"} 

एक कुंजी मुद्रण

console.log(my_obj.obj["key3"]) //Return value3

मैं जावास्क्रिप्ट में नौसिखिया हूँ, टिप्पणियों का स्वागत है। मेरे लिये कार्य करता है।


7

अधिकांश उत्तर में पहले से वर्णित दो सबसे अधिक उपयोग किए जाने वाले तरीके

obj.key3 = "value3";

obj["key3"] = "value3";

एक संपत्ति को परिभाषित करने का एक और तरीका Object.defineProperty () का उपयोग कर रहा है

Object.defineProperty(obj, 'key3', {
  value: "value3",       // undefined by default
  enumerable: true,      // false by default
  configurable: true,    // false by default
  writable: true         // false by default
});

यह विधि तब उपयोगी होती है जब आप संपत्ति को परिभाषित करते समय अधिक नियंत्रण रखना चाहते हैं। परिभाषित संपत्ति को उपयोगकर्ता द्वारा गणना करने योग्य, विन्यास योग्य और योग्य बनाया जा सकता है।


6

आपका उदाहरण एक वस्तु दिखाता है, न कि एक ऐरे। उस स्थिति में, किसी ऑब्जेक्ट में फ़ील्ड जोड़ने का पसंदीदा तरीका केवल उसे असाइन करना है, जैसे:

arr.key3 = value3;

6

अधिकांश ब्राउज़रों द्वारा समर्थित, और यह जाँचता है कि क्या ऑब्जेक्ट कुंजी उपलब्ध है या आप जोड़ना नहीं चाहते हैं, यदि उपलब्ध है तो यह मौजूदा कुंजी मान से अधिक है और यह उपलब्ध नहीं है यह मान के साथ कुंजी जोड़ता है

उदाहरण 1

let my_object = {};

// now i want to add something in it  

my_object.red = "this is red color";

// { red : "this is red color"}

उदाहरण 2

let my_object = { inside_object : { car : "maruti" }}

// now i want to add something inside object of my object 

my_object.inside_object.plane = "JetKing";

// { inside_object : { car : "maruti" , plane : "JetKing"} }

उदाहरण 3

let my_object = { inside_object : { name : "abhishek" }}

// now i want to add something inside object with new keys birth , gender 

my_object.inside_object.birth = "8 Aug";
my_object.inside_object.gender = "Male";


    // { inside_object : 
//             { name : "abhishek",
//               birth : "8 Aug",
//               gender : "Male" 
//            }   
//       }

5

यदि आपके पास एक वस्तु के अंदर कई अनाम वस्तु शाब्दिक हैं, तो कुंजी / मान जोड़े वाले किसी अन्य ऑब्जेक्ट को जोड़ना चाहते हैं, यह करें:

फायरबग द ऑब्जेक्ट:

console.log(Comicbook);

रिटर्न:

[ऑब्जेक्ट {नाम = "स्पाइडरमैन", मूल्य = "11"}, ऑब्जेक्ट {नाम = "मार्सिपुलमी", मूल्य = "18"}, ऑब्जेक्ट {नाम = "गारफील्ड", मूल्य = "2"}]

कोड:

if (typeof Comicbook[3]=='undefined') {
    private_formArray[3] = new Object();
    private_formArray[3]["name"] = "Peanuts";
    private_formArray[3]["value"] = "12";
}

Object {name="Peanuts", value="12"}कॉमिकबुक ऑब्जेक्ट में जोड़ देगा


अच्छी तरह से और स्पष्ट रूप से समझाया गया अन्य विकल्प जो एक आईडी या नाम संपत्ति के साथ वस्तुओं को संबोधित करने के लिए अधिक उपयुक्त है, फिर इसे जोड़ते हुए, अच्छा एक असाइन करना। विशेष रूप से जब यह भविष्य में हो सकता है या अधिक सहारा हो सकता है एक ही विधि लागू होगी बस एक और कोमा डाल दिया है और यह योजनाओं में बदलाव के लिए तैयार है
Avia Afer

5

या तो obj['key3'] = value3या obj.key3 = value3करने के लिए नए जोड़ी जोड़ देगा obj

हालाँकि, मुझे पता है कि jQuery का उल्लेख नहीं किया गया था, लेकिन यदि आप इसका उपयोग कर रहे हैं, तो आप ऑब्जेक्ट को इसके माध्यम से जोड़ सकते हैं $.extend(obj,{key3: 'value3'})। उदाहरण के लिए:

var obj = {key1: 'value1', key2: 'value2'};
$('#ini').append(JSON.stringify(obj));

$.extend(obj,{key3: 'value3'});

$('#ext').append(JSON.stringify(obj));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="ini">Initial: </p>
<p id="ext">Extended: </p>

jQuery। विस्तार (लक्ष्य [, object1] [, objectN]) दो या दो से अधिक वस्तुओं की सामग्री को पहली वस्तु में एक साथ मिला देता है।

और इसके साथ पुनरावर्ती जोड़ / संशोधन की भी अनुमति देता है $.extend(true,object1,object2);:


5

अगले जावास्क्रिप्ट विनिर्देश (उम्मीदवार चरण 3) में एक छोटा और सुरुचिपूर्ण तरीका है:

obj = { ... obj, ... { key3 : value3 } }

डॉ। एक्सल रौशमैयर्स साइट पर ऑब्जेक्ट स्प्रेड ऑब्जेक्ट ऑब्जेक्ट में गहरी खोज की जा सकती है ।

यह 8.6.0 रिलीज से पहले ही नोड.जेएस में काम करता है।

विवाल्डी, क्रोम, ओपेरा और फ़ायरफ़ॉक्स रिलीज़ होने की तारीख में भी इस सुविधा को जानते हैं, लेकिन Mirosoft आज तक नहीं है, न तो Internet Explorer में और न ही एज में।


5
var arrOfObj = [{name: 'eve'},{name:'john'},{name:'jane'}];
    var injectObj = {isActive:true, timestamp:new Date()};

    // function to inject key values in all object of json array

    function injectKeyValueInArray (array, keyValues){
        return new Promise((resolve, reject) => {
            if (!array.length)
                return resolve(array);

            array.forEach((object) => {
                for (let key in keyValues) {
                    object[key] = keyValues[key]
                }
            });
            resolve(array);
        })
    };

//call function to inject json key value in all array object
    injectKeyValueInArray(arrOfObj,injectObj).then((newArrOfObj)=>{
        console.log(newArrOfObj);
    });

इस तरह का आउटपुट: -

[ { name: 'eve',
    isActive: true,
    timestamp: 2017-12-16T16:03:53.083Z },
  { name: 'john',
    isActive: true,
    timestamp: 2017-12-16T16:03:53.083Z },
  { name: 'jane',
    isActive: true,
    timestamp: 2017-12-16T16:03:53.083Z } ]

4

आप इसे इस तरह से जोड़ सकते हैं:

arr['key3'] = value3;

या इस तरह:

arr.key3 = value3;

वैरिएबल के साथ ऑब्जेक्ट में कीपिंग करने वाले उत्तर key3केवल तभी काम करेंगे जब वैल्यू key3थी 'key3'


4

ईसीएमए -262 ( http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf में परिभाषित संपत्ति एक्सेसर्स के अनुसार , P67) को जोड़ने के लिए आप दो तरीके अपना सकते हैं। मौजूद वस्तु। इन सभी दो तरह से, जावास्क्रिप्ट इंजन उन्हें एक ही व्यवहार करेगा।

पहला तरीका डॉट नोटेशन का उपयोग करना है:

obj.key3 = value3;

लेकिन इस तरह, आपको एक पहचानकर्ता का उपयोग करना चाहिए डॉट नोटेशन के बाद ।

दूसरा तरीका ब्रैकेट नोटेशन का उपयोग करना है:

obj["key3"] = value3;

और दूसरा रूप:

var key3 = "key3";
obj[key3] = value3;

इस तरह, आप ब्रैकेट अंकन में एक अभिव्यक्ति ( पहचानकर्ता शामिल करें ) का उपयोग कर सकते हैं ।


4

हम इस तरह से भी कर सकते हैं।

var myMap = new Map();
myMap.set(0, 'my value1');
myMap.set(1, 'my value2');
 for (var [key, value] of myMap) {
  console.log(key + ' = ' + value);
 }

1

चूंकि यह अतीत का सवाल है, लेकिन वर्तमान की समस्या। एक और समाधान सुझाएगा: फ़ंक्शन के लिए बस कुंजी और मान पास करें और आपको एक मानचित्र ऑब्जेक्ट मिलेगा।

var map = {};
function addValueToMap(key, value) {
map[key] = map[key] || [];
map[key].push(value);
}

2
यह उस प्रश्न से संबंधित नहीं लगता है जो सभी से पूछा गया था।
क्वेंटिन

0

आदेश करने के लिए पहले जोड़ें किसी ऑब्जेक्ट को कुंजी-मान पेयर तो में के लिए उस तत्व के साथ काम करता है पहले ऐसा करते हैं:

    var nwrow = {'newkey': 'value' };
    for(var column in row){
        nwrow[column] = row[column];
    }
    row = nwrow;

0

इसे प्राप्त करने का सर्वोत्तम तरीका नीचे बताया गया है:

function getKey(key) {
  return `${key}`;
}

var obj = {key1: "value1", key2: "value2", [getKey('key3')]: "value3"};

//console.log(obj);

0

आप {[key]: value}वाक्य रचना का उपयोग करके एक नई वस्तु बना सकते हैं :

const foo = {
  a: 'key',
  b: 'value'
}

const bar = {
  [foo.a]: foo.b
}

console.log(bar); // {key: 'value'}
console.log(bar.key); // value

const baz = {
  ['key2']: 'value2'
}

console.log(baz); // {key2: 'value2'}
console.log(baz.key2); // value2

पिछले सिंटैक्स के साथ अब आप {...foo, ...bar}अपने पुराने मान को म्यूट किए बिना किसी नए ऑब्जेक्ट को जोड़ने के लिए फैल सिंटैक्स का उपयोग कर सकते हैं :

const foo = {a: 1, b: 2};

const bar = {...foo, ...{['c']: 3}};

console.log(bar); // {a: 1, b: 2, c: 3}
console.log(bar.c); // 3

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