आपत्ति करने के लिए तत्व जोड़ना


222

मुझे एक json फ़ाइल को पॉप्युलेट करने की आवश्यकता है, अब मेरे पास कुछ इस तरह है:

{"element":{"id":10,"quantity":1}}

और मुझे एक और "तत्व" जोड़ने की आवश्यकता है। मेरा पहला कदम एक वस्तु प्रकार का उपयोग करके उस जसन को डाल cart = JSON.parseरहा है, अब मुझे नया तत्व जोड़ने की आवश्यकता है। मुझे लगता है कि मुझे cart.pushएक और तत्व जोड़ने के लिए उपयोग करना चाहिए , मैंने यह कोशिश की:

var element = {};
element.push({ id: id, quantity: quantity });
cart.push(element);

लेकिन मुझे त्रुटि हुई "जब मेरे पास करने के लिए ऑब्जेक्ट कोई विधि धक्का नहीं है" element.push, और मुझे लगता है कि मैं कुछ गलत कर रहा हूं क्योंकि मैं कहीं भी "तत्व" नहीं बता रहा हूं।

मैं उसे कैसे कर सकता हूँ?

संपादित करें: सभी के लिए खेद है कि मेरे सिर में बहुत भ्रम था।

मुझे लगा कि डेटा लेने के दौरान मैं केवल ऑब्जेक्ट प्रकार प्राप्त कर सकता हूं JSON.parse, लेकिन मुझे वह मिलता है जो मैंने JSON में पहले स्थान पर रखा था।

ऑब्जेक्ट के बजाय सरणी डालकर मेरी समस्या हल हो गई, मैंने बहुत सारे सुझावों का उपयोग किया यहां भी, आप सभी को धन्यवाद!



Object.assign (लक्ष्य, स्रोत); स्रोत ऑब्जेक्ट से लक्ष्य ऑब्जेक्ट तक सभी गुणों की प्रतिलिपि बनाने के लिए उपयोग किया जा सकता है।
डेविड स्पेक्टर

जवाबों:


287

आपका तत्व एक सरणी नहीं है, हालांकि कई तत्व वस्तुओं का समर्थन करने के लिए आपकी गाड़ी को एक सरणी होने की आवश्यकता है। कोड उदाहरण:

var element = {}, cart = [];
element.id = id;
element.quantity = quantity;
cart.push(element);

यदि आप चाहते हैं कि कार्ट प्रपत्र में ऑब्जेक्ट की एक सरणी हो { element: { id: 10, quantity: 1} }तो प्रदर्शन करें:

var element = {}, cart = [];
element.id = id;
element.quantity = quantity;
cart.push({element: element});

JSON.stringify() टिप्पणी में चिंता के रूप में उल्लेख किया गया था:

>> JSON.stringify([{a: 1}, {a: 2}]) 
      "[{"a":1},{"a":2}]" 

2
धन्यवाद, लेकिन मेरी गाड़ी अब एक सरणी नहीं है और मैं कार्ट नहीं कर सकता ।ush :( मुझे इस ऑपरेशन के बाद JSON.stringify (कार्ट) का उपयोग करने के लिए ऑब्जेक्ट की आवश्यकता है
HypeZ

@ हाइपज आप अभी भी कार्ट को सख्त कर सकते हैं यदि यह ऑब्जेक्ट्स की एक सरणी है।
कॉन्सटेंटिन दिनेव

फिर से धन्यवाद! लेकिन मेरा आधार डेटा शुरुआत में "कार्ट = JSON.parse (jsonfile)" के ऑब्जेक्ट प्रकार का कारण है .. मुझे नहीं लगता कि मुझे एक ऑब्जेक्ट के रूप में json लेना चाहिए, इसे सरणी में परिवर्तित करें, तत्व जोड़ें, स्ट्रिंग करें ..
हाइपजेड

किसी कारण से, मेरी वस्तु केवल अंतिम तत्व से भर जाती है। उदाहरण के लिए मेरे पास 4 अलग-अलग आइटम हैं, लेकिन एक वस्तु में सभी 4 तत्व = अंतिम मूल्य समाधान है जो मैंने पाया है कि तत्व = {} है; के लिए अंदर है, तो ठीक से अपने काम
गोरोद्दिज दिमित्रिज

1
@GorodeckijDimitrij यदि आप एक ही तत्व ऑब्जेक्ट का पुन: उपयोग कर रहे हैं और आप इसे नए मानों के साथ कुंजी फिर से खोल रहे हैं, तो आप तत्व के एक और एक ही उदाहरण को संशोधित करेंगे, इसे फिर से एक सरणी में धकेलेंगे। बस आपके द्वारा जोड़े जा रहे प्रत्येक तत्व के लिए एक नए तत्व ऑब्जेक्ट का उपयोग करें, जो आपने फॉर-लूप के दायरे में किया है।
कॉन्स्टेंटिन दिनेव

161

उस पंक्ति के साथ

var element = {};

आप elementएक सादे वस्तु के रूप में परिभाषित करते हैं। देशी जावास्क्रिप्ट ऑब्जेक्ट का कोई push()तरीका नहीं है। एक सादे वस्तु में नए आइटम जोड़ने के लिए इस सिंटैक्स का उपयोग करें:

element[ yourKey ] = yourValue;

दूसरी ओर आप elementएक सरणी का उपयोग करके परिभाषित कर सकते हैं

var element = [];

फिर आप तत्वों का उपयोग कर जोड़ सकते हैं push()


4
element[ yourKey ] = yourValue;किसी वस्तु में तत्व को जोड़ने का सबसे अच्छा तरीका है।
प्रमेश बजराचार्य

लेकिन आप तत्व के साथ जोड़े गए तत्व के आदेश को नहीं दे सकते हैं [yourKey] = yourValue;
रोलरकोस्टा

2
@Pramesh Bajracharya यह तत्व को ADD मान नहीं देता है, यह वर्तमान तत्व को उस मान पर सेट करता है।
हसन

1
@ सोमेश आप डुप्लीकेट कैसे रखना चाहते हैं? आप कर सकते हैंelement[ yourkey ] = [ element{yourkey], yourNewValue ];
सिरको

1
@ सोमेश यह आपको एक डुप्लिकेट कुंजी देगा, जो परिभाषा में जेएस ऑब्जेक्ट में संभव नहीं है। आप केवल एक कुंजी के लिए कई मान एकत्र कर सकते हैं जैसे मैंने पहले दिखाया है।
सिरको

21

यदि कार्ट को एक ऑब्जेक्ट के रूप में संग्रहीत किया जाना है, न कि सरणी (हालांकि मैं [[] के रूप में स्टोर करने की सलाह दूंगा) तो आप हमेशा आईडी की कुंजी के रूप में उपयोग करने के लिए संरचना बदल सकते हैं:

var element = { quantity: quantity };
cart[id] = element;

इससे आप कार्ट में कई आइटम जोड़ सकते हैं जैसे:

cart["1"] = { quantity: 5};
cart["2"] = { quantity: 10};

// Cart is now:
// { "1": { quantity: 5 }, "2": { quantity: 10 } }

धन्यवाद, लेकिन मेरी गाड़ी को एक वस्तु होने की आवश्यकता है, न कि एक सरणी :(
हाइपजेड

3
इस तरह से एक वस्तु का उपयोग करने का एक कारण, यदि आपको वस्तुओं को हटाने की आवश्यकता है। किसी ऑब्जेक्ट से एक कुंजी को हटाना एक सरणी से एक कुंजी को हटाने की तुलना में बहुत आसान है।
bryc

यदि हाइपेज की सरणी टिप्पणी किसी को भी फेंक देती है, तो क्रेग का जवाब एक सरणी नहीं जोड़ता है, ब्रैकेट [] का उपयोग संपत्ति तक पहुंचने के लिए किया जाता है। इसे यहाँ jsfiddle पर टेस्ट करें और इसके बारे में यहाँ मोज़िला में पढ़ें और यहाँ डिजिटल ओशन में एक बढ़िया लेख है कि काश मैं बहुत पहले आ जाता।
Hastig Zusammenstellen

12

किसी वस्तु के उपयोग के लिए संलग्न करना Object.assign

var ElementList ={}

function addElement (ElementList, element) {
    let newList = Object.assign(ElementList, element)
    return newList
}
console.log(ElementList)

आउटपुट:

{ "तत्व": { "id": 10, "मात्रा": 1}, "तत्व": { "id": 11, "मात्रा": 2}}


यह शायद चीजों को करने का सबसे कार्यात्मक तरीका है, लेकिन एक नवागंतुक जावास्क्रिप्ट डेवलपर शायद इसे नहीं समझेंगे।
कोडीनजा

1
मैंने इसकी कोशिश की, लेकिन यह मौजूदा तत्व को ओवरराइड करेगा, क्योंकि दोनों का एक ही नाम है element, इसलिए इसका अंतिम तत्व केवल होगा।
हरितसिंह गोहिल

7

मैं इस कोशिश से संबंधित कुछ पढ़ रहा था अगर यह उपयोगी है।

1. एक वस्तु के अंदर एक धक्का समारोह निर्धारित करें।

let obj={push:function push(element){ [].push.call(this,element)}};

अब आप एरे जैसे तत्वों को धक्का दे सकते हैं

obj.push(1)
obj.push({a:1})
obj.push([1,2,3])

यह इस वस्तु का उत्पादन करेगा

obj={
 0: 1
 1: {a: 1}
 2: (3) [1, 2, 3]
 length: 3
}

ध्यान दें कि तत्व इंडेक्स के साथ जोड़े जाते हैं और यह भी देखते हैं कि ऑब्जेक्ट में एक नई लंबाई गुण जोड़ा गया है। यह ऑब्जेक्ट की लंबाई का पता लगाने के लिए भी उपयोगी होगा। यह push()फ़ंक्शन की सामान्य प्रकृति के कारण काम करता है


6

आपको var element = [];
जावास्क्रिप्ट में लिखना चाहिए {}एक खाली वस्तु है और []एक खाली सरणी है।


6
cart.push({"element":{ id: id, quantity: quantity }});

4
cart.push नहीं कर सकते क्योंकि कार्ट अब एक ऑब्जेक्ट है! :(
हाइपजेड

कोई विशेष कारण है कि इसकी वस्तु सरणी के बजाय एक वस्तु क्यों है?
क्रिस

क्योंकि मुझे यह "कार्ट = JSON.parse (jsonfile)" से मिला और यह एक वस्तु देता है
HypeZ

5
function addValueInObject(object, key, value) {
    var res = {};
    var textObject = JSON.stringify(object);
    if (textObject === '{}') {
        res = JSON.parse('{"' + key + '":"' + value + '"}');
    } else {
        res = JSON.parse('{' + textObject.substring(1, textObject.length - 1) + ',"' + key + '":"' + value + '"}');
    }
    return res;
}

यह कोड काम किया है।


3

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

var data = [{field:"Data",type:"date"},  {field:"Numero",type:"number"}];

var columns = {};

var index = 0;

$.each(data, function() {

    columns[index] = {
        field : this.field,
        type : this.type
    };

    index++;
});

console.log(columns);

3

मूल वस्तु में नई कुंजी / जोड़ी तत्व जोड़ना:

const obj = { a:1, b:2 }
const add = { c:3, d:4, e: ['x','y','z'] }

Object.entries(add).forEach(([key,value]) => {obj[key] = value })

obj नया मान:

{a: 1, b: 2, c: 3, d: 4, e: ["x", "y", "z"] }

2

अगर कोई एक समान JSON बनाने की तलाश में है, तो cartएक सरणी के रूप में उपयोग किए बिना , यहाँ जाता है:

मेरे पास वस्तुओं का एक सरणी है myArr:

var myArr = [{resourceType:"myRT",
            id: 1,
            value:"ha"},
            {resourceType:"myRT",
            id: 2,
            value:"he"},
            {resourceType:"myRT",
            id: 3,
            value:"Li"}];

और मैं निम्नलिखित संरचना के साथ एक JSON बनाने का प्रयास करूंगा:

{
 "1":{"resourceType":"myRT","id":"1","value":"ha"},
 "2":{"resourceType":"myRT","id":"2","value":"he"},
 "3":{"resourceType":"myRT","id":"3","value":"Li"}
}

आप बस कर सकते हैं-

var cart = {};
myArr.map(function(myObj){
                    cart[myObj.id]= myObj;
                    });

आप उस नई JSON संरचना का मान कैसे जोड़ते हैं जो आपने बनाई है?
जूड फर्नांडिस

1
@JudeFernandes cart[key]=valueमूल रूप से इसका प्रमुख मूल्य मानचित्र है। यदि उत्तर सहायक था, तो उत्थान करें। धन्यवाद!
साद पटेल

2

किसी के लिए अभी भी एक समाधान की तलाश में, मुझे लगता है कि वस्तुओं को एक सरणी में संग्रहीत किया जाना चाहिए था ...

var element = {}, cart = [];
element.id = id;
element.quantity = quantity;
cart.push(element);

फिर जब आप किसी तत्व को एक वस्तु के रूप में उपयोग करना चाहते हैं तो आप ऐसा कर सकते हैं ...

var element = cart.find(function (el) { return el.id === "id_that_we_want";});

"Id_that_we_want" पर एक वैरिएबल डालें और इसे उस तत्व की आईडी दें, जिसे हम अपने एरे से चाहते हैं। एक "elemnt" ऑब्जेक्ट वापस आ गया है। निश्चित रूप से हमें ऑब्जेक्ट खोजने के लिए आईडी की जरूरत नहीं है। हम खोज करने के लिए किसी अन्य संपत्ति का उपयोग कर सकते हैं।


1
 function addValueInObject(value, object, key) {

        var addMoreOptions = eval('{"'  + key + '":' +  value + '}');

        if(addMoreOptions != null) {
            var textObject = JSON.stringify(object);
            textObject = textObject.substring(1,textObject.length-1);
            var AddElement = JSON.stringify(addMoreOptions);
            object = eval('{' + textObject +','+  AddElement.substring(1,AddElement.length-1) + '}');
        }
        return object;
    }

addValueInObject('sdfasfas', yourObject, 'keyname');

या:

var obj = {'key':'value'};

obj.key2 = 'value2';

हालांकि यह समान परिणाम प्राप्त करने का एक तरीका है, लेकिन यह समाधान साफ ​​नहीं है।
वारुणपाव

1

पुश एरे का एक तरीका है, इसलिए ऑब्जेक्ट के लिए आप अंतिम तत्व का इंडेक्स प्राप्त कर सकते हैं, और आप संभवतः उसी तरह से काम कर सकते हैं जैसे कि ऑब्जेक्ट के लिए नीचे

var lastIndex = Object.keys(element)[Object.keys(element).length-1];

तब तत्व के नए सूचकांक में ऑब्जेक्ट जोड़ें

element[parseInt(lastIndex) +1] = { id: id, quantity: quantity };

1

यदि आप जेएस के साथ लूप करने के लिए डिज़ाइन नहीं करते हैं। उदाहरण के लिए आपके लिए लूप करने के लिए पीएचपी पास करें

let decision = {}
decision[code+'#'+row] = event.target.value

यह अवधारणा थोड़ी मदद कर सकती है


1

यह एक पुराना सवाल है, वैसे भी आज सबसे अच्छा अभ्यास Object.defineProperty का उपयोग करके है

const object1 = {};

Object.defineProperty(object1, 'property1', {
  value: 42,
  writable: false
});

object1.property1 = 77;
// throws an error in strict mode

console.log(object1.property1);
// expected output: 42
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.