বস্তুর সাথে উপাদান যুক্ত করা


222

আমার একটি জেসন ফাইল তৈরি করতে হবে, এখন আমার কাছে এরকম কিছু রয়েছে:

{"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পেতে পারি তবে আমি জেএসএনে যা রেখেছি তা প্রথম স্থানে পেয়েছি।

বস্তুর পরিবর্তে অ্যারে রেখে দেওয়া আমার সমস্যার সমাধান করেছে, আমি এখানে প্রচুর পরামর্শ পেয়েছি, আপনাকে ধন্যবাদ!



অবজেক্ট.সেসাইন (লক্ষ্য, উত্স); উত্স অবজেক্ট থেকে একটি লক্ষ্য অবজেক্টে সমস্ত বৈশিষ্ট্য অনুলিপি করতে ব্যবহার করা যেতে পারে।
ডেভিড স্পেক্টর

উত্তর:


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
আপনাকে ধন্যবাদ, কিন্তু আমার ট্রলি এখন একটি অ্যারের নয় এবং আমি cart.push ব্যবহার করতে পারবেন না :( আমি একটি বস্তুর প্রয়োজন এই অপারেশনের পর JSON.stringify (কার্ট) ব্যবহার করতে
HypeZ

@ হাইপজেড আপনি যদি কার্টকে অবজেক্টের অ্যারে করে রাখেন তবে আপনি এখনও স্ট্রন্টাইফাই করতে পারেন।
কনস্ট্যান্টিন দিনভ

আবার আপনাকে ধন্যবাদ! তবে আমার বেস ডেটা শুরুর দিকে "কার্ট = জেএসএন. পার্স (জসনফিল)" এর অবজেক্ট টাইপ কারণ .. আমি মনে করি না যে আমি জসনকে একটি অবজেক্ট হিসাবে গ্রহণ করব, এটিকে অ্যারে রূপান্তর করব, উপাদান যুক্ত করব, স্ট্রিংফাই করব ..
হাইপজেড

কোনও কারণে, আমার অবজেক্টটি কেবলমাত্র শেষ উপাদান দিয়ে পূর্ণ হয়। উদাহরণস্বরূপ আমার কাছে 4 টি আলাদা আইটেম রয়েছে তবে একটি অবজেক্টের মধ্যে 4 টি উপাদানই = সর্বশেষ মান সমাধান পেয়েছি এটি হল উপাদান তৈরি করুন = {}; এর ভিতরে, তারপরে সঠিকভাবে কাজ করুন
গোরোডেকিজ দিমিত্রিজ

1
@ গোরোদেকিজডিমিত্রিজ যদি আপনি একই উপাদানটির পুনরায় ব্যবহার করছেন এবং আপনি এর কীগুলি নতুন মানগুলির সাথে পুনরায় তৈরি করেন, তবে আপনি এটির উপাদানগুলির একই উদাহরণটি পরিবর্তন করে এটিকে আবার অ্যারেতে ঠেলে দিবেন। আপনি যে প্রতিটি উপাদান যুক্ত করছেন তার জন্য কেবলমাত্র একটি নতুন উপাদান অবজেক্টটি ব্যবহার করুন, যা আপনি লুপের ফাঁকে রেখেছেন।
কনস্ট্যান্টিন দিনেভ

160

সেই সারি দিয়ে

var element = {};

আপনি elementএকটি সরল বস্তু হতে সংজ্ঞায়িত । নেটিভ জাভাস্ক্রিপ্ট অবজেক্টের কোনও push()পদ্ধতি নেই। কোনও সরল বস্তুতে নতুন আইটেম যুক্ত করতে এই বাক্য গঠনটি ব্যবহার করুন:

element[ yourKey ] = yourValue;

অন্যদিকে আপনি elementঅ্যারে ব্যবহার করে সংজ্ঞায়িত করতে পারেন

var element = [];

তারপরে আপনি ব্যবহার করে উপাদানগুলি যুক্ত করতে পারেন push()


4
element[ yourKey ] = yourValue;কোনও জিনিসটিতে উপাদান যুক্ত করার সর্বোত্তম উপায়।
প্রদীপ বাজরাচার্য

তবে আপনি বস্তুতে উপাদানটির সাথে যুক্ত উপাদানটির ক্রমকে মঞ্জুরি দিতে পারবেন না [আপনারকে]] আপনার মূল্য;
রোলারকোস্টা

2
@ প্রমেশ বাজরাচার্য এটি উপাদানটির সাথে মূল্য সংযোজন করে না, এটি কেবলমাত্র বর্তমান উপাদানটিকে সেই মান হিসাবে সেট করে।
হাসেন

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

হাইপজেডের অ্যারে মন্তব্য যদি কাউকে ছাড়িয়ে দেয় তবে ক্রেগের উত্তর কোনও অ্যারে যোগ করে না, সম্পত্তিটি অ্যাক্সেস করতে বন্ধনীগুলি [] ব্যবহার করা হয়। এটি এখানে জিসফিডেলে পরীক্ষা করুন এবং এটি সম্পর্কে এখানে মজিলায় পড়ুন এবং এখানে ডিজিটাল মহাসাগরের একটি দুর্দান্ত নিবন্ধ যা আমি আশা করি যে আমি অনেক আগেই এসেছি।
হাসটিগ জুসামেনস্টেলেল

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, সুতরাং এটির কেবলমাত্র সর্বশেষ উপাদান থাকবে।
হরিতসিংহ গোহিল

6

আপনার var element = [];
জাভাস্ক্রিপ্টে লেখা উচিত {}একটি খালি অবজেক্ট এবং []একটি খালি অ্যারে।


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

4
কার্ট.পশ করতে পারে না কারণ কার্ট এখন একটি বস্তু! :(
হাইপেজ

কোন নির্দিষ্ট কারণ এটি অ্যারের চেয়ে একটি বস্তু কেন?
ক্রিস

কারণ আমি এটি "কার্ট = JSON.parse (jsonfile)" থেকে পেয়েছি এবং এটি একটি বস্তু দেয়
হাইপজেড

6

আমি এই ব্যবহারের সাথে সম্পর্কিত কিছু পড়ছিলাম যদি এটি কার্যকর হয়।

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
}

সূচিগুলির সাথে উপাদানগুলি যুক্ত করা আছে তা লক্ষ্য করুন এবং দেখুন যে কোনও নতুন দৈর্ঘ্যের বৈশিষ্ট্যটি বস্তুতে যুক্ত হয়েছে object এটি বস্তুর দৈর্ঘ্যটিও খুঁজে পেতে দরকারী হবে function এটি push()কার্যকারিতার সাধারণ প্রকৃতির কারণে কাজ করে


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);

2

যদি কেউ 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;
                    });

আপনি যে নতুন জেএসএন কাঠামো তৈরি করেছেন তাতে কীভাবে কোনও মূল্য যুক্ত করবেন?
জুড ফার্নান্দেস

1
@ জুডফারনান্দেস cart[key]=valueমূলত এটির মূল মানচিত্র। উত্তরটি সহায়ক হলে upvote করুন। ধন্যবাদ!
সাদ প্যাটেল

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" এ একটি ভেরিয়েবল রাখুন এবং আমাদের অ্যারে থেকে যে উপাদানটি চান তা এর আইডি দিন। একটি "এলেমেন্ট" অবজেক্ট ফিরে আসে। অবশ্যই অবজেক্টটি খুঁজতে আমাদের আইডি করতে হবে না। আমরা অনুসন্ধান করতে অন্য কোনও সম্পত্তি ব্যবহার করতে পারি।


2

মূল কীতে নতুন কী / জোড় উপাদান যুক্ত করা হচ্ছে:

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 })

আপত্তি নতুন মান:

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

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';

যদিও এটি একই ফলাফল অর্জনের একটি উপায়, এই সমাধানটি ঝরঝরে নয়।
warunapww

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

এটি একটি পুরানো প্রশ্ন, যাইহোক আজ অবজেক্ট.ডেফাইনপ্রোপার্টি ব্যবহার করে সেরা অনুশীলন

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.