किसी वस्तु पर लगाना


156

मेरे पास एक वस्तु है जो अलर्ट और उनके बारे में कुछ जानकारी रखती है:

var alerts = { 
    1: { app: 'helloworld', message: 'message' },
    2: { app: 'helloagain', message: 'another message' }
}

इस के अलावा, मैं, एक चर का कहना है कि देखते हैं कि कितने पास चेतावनी है alertNo। मेरा प्रश्न यह है कि जब मैं एक नया अलर्ट जोड़ने जाऊं, तो alertsक्या वस्तु पर अलर्ट को जोड़ने का कोई तरीका है ?


6
मुझे लगता है कि आपको अपने पोस्ट किए गए json: 1: {app: 'helloworld', 'message'} => 1: {app: 'helloworld', संदेश: 'a message'} से कोई समस्या है?
एंड्रियास ग्रीच

जवाबों:


235

एकल ऑब्जेक्ट के गुणों के बजाय किसी सरणी में रिकॉर्ड के रूप में अलर्ट को संग्रहीत करने के बारे में कैसे?

var alerts = [ 
    {num : 1, app:'helloworld',message:'message'},
    {num : 2, app:'helloagain',message:'another message'} 
]

और फिर एक जोड़ने के लिए, बस उपयोग करें push:

alerts.push({num : 3, app:'helloagain_again',message:'yet another message'});

1
यह उत्तर आपको उम्मीद करता है कि आपको जोड़े जाने वाले अलर्ट की आईडी पता होगी। ठीक है, अगर आप पहले से ही जानते हैं, तो आप मूल वस्तु प्रारूप का अनुसरण कर सकते हैं और करते हैं alerts[3] = { app: 'hello3', message: 'message 3' }:। इस के साथ आप आईडी से संदेश पहुंच सकता है: alerts[2] => { app: 'helloworld', message: 'message' }। : लंबाई हो रही है तो बस है Object.keys(alerts).length(बिट कि है सरणियों के साथ आसान)
मैट

61

jQuery $.extend(obj1, obj2)आपके लिए 2 ऑब्जेक्ट्स मर्ज करेगा, लेकिन आपको वास्तव में एक सरणी का उपयोग करना चाहिए।

var alertsObj = {
    1: {app:'helloworld','message'},
    2: {app:'helloagain',message:'another message'}
};

var alertArr = [
    {app:'helloworld','message'},
    {app:'helloagain',message:'another message'}
];

var newAlert = {app:'new',message:'message'};

$.extend(alertsObj, newAlert);
alertArr.push(newAlert);

JQuery का विस्तार धीमा है: trevmex.com/post/2531629773/jquerys-extend-is-slow । इसके अलावा, एक टाइपो है। $ .extend () में $ .extend () पढ़ना चाहिए।
केन

टाइपो के साथ अच्छी पकड़। ऐसी स्थितियाँ हैं जहाँ $ .extends सहायक है लेकिन आप सही हैं कि जब संभव हो तो इसे टाला जाना चाहिए।
सम्मान

1
मुझे लगता है कि विस्तार () ठीक है, जब आपके पास केवल एक रिकॉर्ड संरचना होती है, ब्रैकेट्स के बिना, बाकी के लिए मैं सम्मान के साथ सहमत हूं ।कोड, बस पुश का उपयोग करें ()
elvenbyte

39

आप इसे Object.assign () के साथ कर सकते हैं । कभी-कभी आपको एक सरणी की आवश्यकता होती है, लेकिन जब एक एकल JSON ऑब्जेक्ट से कार्य करने वाले फ़ंक्शन के साथ काम करते हैं - जैसे कि एक ओडटा कॉल - मैंने यह विधि केवल इसे अनपैक करने के लिए एक सरणी बनाने की तुलना में सरल पाया है।

var alerts = { 
    1: {app:'helloworld',message:'message'},
    2: {app:'helloagain',message:'another message'}
}

alerts = Object.assign({3: {app:'helloagain_again',message:'yet another message'}}, alerts)

//Result:
console.log(alerts)
{ 
    1: {app:'helloworld',message:'message'},
    2: {app:'helloagain',message:'another message'}
    3: {app: "helloagain_again",message: "yet another message"}
} 

संपादित करें: अगली कुंजी प्राप्त करने के बारे में टिप्पणी को संबोधित करने के लिए, आप Object.keys () फ़ंक्शन के साथ कुंजियों की एक सरणी प्राप्त कर सकते हैं - कुंजी को बढ़ाने के उदाहरण के लिए Vadi का उत्तर देखें। इसी तरह, आप के साथ सभी मान प्राप्त कर सकते Object.values () के साथ और मुख्य मान जोड़े Object.entries ()

var alerts = { 
    1: {app:'helloworld',message:'message'},
    2: {app:'helloagain',message:'another message'}
}
console.log(Object.keys(alerts))
// Output
Array [ "1", "2" ]

7
यह वास्तव में सही उत्तर है क्योंकि अन्य वस्तु को सरणी में बदलने की बात कर रहे हैं, लेकिन इस तरह से आप इसे वस्तु के रूप में रख रहे हैं। लेखक के मामले में, यह संभव है कि उसके लिए सरणियों के साथ काम करना बेहतर था, लेकिन यह इस बात का जवाब होगा कि किसी वस्तु को कैसे जोड़ा जाए।
गोरान जैकोवल्जेविच

2
हाँ, मैं सहमत हूँ .. प्रश्न में वस्तु का एक सरणी नहीं है, यह सिर्फ एक वस्तु है इसलिए यह सही उत्तर है!
किशन ओझा

हालांकि यह उचित जवाब है; आप कैसे जान सकते हैं कि आप किस इंडेक्स में नई वस्तु जोड़ने जा रहे हैं?
Capan

1
यह शीर्षक प्रश्न का उत्तर है।
FistOfFury

11

अन्य उत्तरों की तरह, आपको सरणी के साथ काम करना आसान लग सकता है।

अगर नहीं:

var alerts = { 
    1: {app:'helloworld',message:'message'},
    2: {app:'helloagain',message:'another message'}
}

// Get the current size of the object
size = Object.keys(alerts).length

//add a new alert 
alerts[size + 1] = {app:'Your new app', message:'your new message'}

//Result:
console.log(alerts)
{ 
    1: {app:'helloworld',message:'message'},
    2: {app:'helloagain',message:'another message'}
    3: {app: "Another hello",message: "Another message"}
}      

कोशिश करो:

https://jsbin.com/yogimo/edit?js,console


यह काम नहीं करेगा, यदि आपने अलर्ट हटा दिया है या कोई कुंजी छोड़ दी है। आप की तर्ज पर कुछ जोड़ना चाहिए while(alerts[size]) size++;और शायद नाम बदल sizeदेना चाहिए newId
जब तक

11

आप निम्नानुसार सिंटैक्स का उपयोग कर सकते हैं ..

var alerts = { 
1: { app: 'helloworld', message: 'message' },
2: { app: 'helloagain', message: 'another message' }
 }

alerts = {...alerts, 3: {app: 'hey there', message: 'another message'} }

7

अब ES6 के साथ हमारे पास एक बहुत शक्तिशाली प्रसार ऑपरेटर (... ऑब्जेक्ट) है जो इस काम को बहुत आसान बना सकता है। इसे निम्नानुसार किया जा सकता है:

let alerts = { 
   1: { app: 'helloworld', message: 'message' },
   2: { app: 'helloagain', message: 'another message' }
} 

//now suppose you want to add another key called alertNo. with value 2 in the alerts object. 

alerts = {
   ...alerts,
   alertNo: 2
 }

बस। यह आप चाहते हैं कुंजी जोड़ देगा। उम्मीद है की यह मदद करेगा!!


6

आपको वास्तव में अलर्ट के सुझावों के साथ जाना चाहिए, लेकिन अन्यथा आपके द्वारा बताई गई वस्तु में इस तरह जोड़ना होगा:

alerts[3]={"app":"goodbyeworld","message":"cya"};

लेकिन चूँकि आपको शाब्दिक संख्याओं का उपयोग नहीं करना चाहिए क्योंकि नाम सब कुछ उद्धृत करते हैं और साथ जाते हैं

alerts['3']={"app":"goodbyeworld","message":"cya"};

या आप इसे वस्तुओं की एक सरणी बना सकते हैं।

पहुँच कर ऐसा लग रहा है

alerts['1'].app
=> "helloworld"

5

क्या आपके पास बाहरी-सबसे संरचना को एक सरणी में बदलने की क्षमता है? तो ऐसा लगेगा

var alerts = [{"app":"helloworld","message":null},{"app":"helloagain","message":"another message"}];

इसलिए जब आपको एक जोड़ने की आवश्यकता होती है, तो आप इसे सरणी पर धकेल सकते हैं

alerts.push( {"app":"goodbyeworld","message":"cya"} );

फिर आपके पास एक अंतर्निहित शून्य-आधारित इंडेक्स है कि त्रुटियों को कैसे गणना की जाती है।


2

ES6 के साथ आसान रास्ता:

let exampleObj = {
  arg1: {
    subArg1: 1,
    subArg2: 2,
  },
  arg2: {
    subArg1: 1,
    subArg2: 2,
  }
};

exampleObj.arg3 = {
  subArg1: 1,
  subArg2: 2,
};

console.log(exampleObj);

{
arg1: {subArg1: 1, subArg2: 2}
arg2: {subArg1: 1, subArg2: 2}
arg3: {subArg1: 1, subArg2: 2}
}

0

एक विकल्प के रूप में, ES6 में, फैल सिंटैक्स का उपयोग किया जा सकता है। अलर्ट के लिए ${Object.keys(alerts).length + 1}अगला रिटर्न id

let alerts = { 
    1: {app:'helloworld',message:'message'},
    2: {app:'helloagain',message:'another message'}
};

alerts = {
  ...alerts, 
  [`${Object.keys(alerts).length + 1}`]: 
  { 
    app: `helloagain${Object.keys(alerts).length + 1}`,message: 'next message' 
  } 
};

console.log(alerts);


0

मुझे क्षमा करें, लेकिन मैं अपनी प्रतिष्ठा के कारण पहले से ही आपके जवाबों पर टिप्पणी नहीं कर सकता! ... इसलिए, यदि आप अपनी वस्तु की संरचना को संशोधित करना चाहते हैं, तो आपको ऐसा करना चाहिए जैसे ठाणे प्लमर कहते हैं, लेकिन अगर आप परवाह नहीं करते हैं तो एक छोटी सी चाल आइटम डालने के लिए: यदि आप प्रविष्टि के लिए संख्या निर्दिष्ट नहीं करते हैं तो यह पहली स्थिति में डाला जाएगा।

यह अद्भुत है यदि आप उदाहरण के लिए एक जोंस ऑब्जेक्ट को एक मोंगोबीडीबी फ़ंक्शन कॉल के लिए पास करना चाहते हैं और प्राप्त स्थितियों के अंदर एक नई कुंजी डालें। इस मामले में मैं अपने कोड के अंदर एक चर से कुछ जानकारी के साथ एक आइटम myUid डालने वाला हूं:

// From backend or anywhere
let myUid = { _id: 'userid128344'};
// ..
// ..

  let myrequest = { _id: '5d8c94a9f629620ea54ccaea'};
  const answer = findWithUid( myrequest).exec();

// ..
// ..

function findWithUid( conditions) {
  const cond_uid = Object.assign({uid: myUid}, conditions);
  // the object cond_uid now is:
  // {uid: 'userid128344', _id: '5d8c94a9f629620ea54ccaea'}
  // so you can pass the new object Json completly with the new key
  return myModel.find(cond_uid).exec();
}


0

[जावास्क्रिप्ट] थोड़ा गुड़ के बाद, यह मेरे लिए काम किया:

 let dateEvents = (
            {
                'Count': 2,
                'Items': [
                    {
                        'LastPostedDateTime': {
                            "S": "10/16/2019 11:04:59"
                        }
                    },
                    {
                        'LastPostedDateTime': {
                            "S": "10/30/2019 21:41:39"
                        }
                    }
                ],
            }
        );
        console.log('dateEvents', dateEvents);

मेरे द्वारा हल करने के लिए आवश्यक समस्या यह थी कि मेरे पास कोई भी ईवेंट हो सकता है और वे सभी का एक ही नाम होगा: LastPostedDateTime वह सब अलग है जो दिनांक और समय है।


-1

इसे इस्तेमाल करे:

alerts.splice(0,0,{"app":"goodbyeworld","message":"cya"});

बहुत अच्छी तरह से काम करता है, यह इसे सरणी की शुरुआत में जोड़ देगा।


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