কোন বস্তুর সাথে যুক্ত করা হচ্ছে


156

আমার কাছে একটি অবজেক্ট রয়েছে যা সতর্কতা এবং সেগুলি সম্পর্কে কিছু তথ্য রাখে:

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

এটির পাশাপাশি, আমার একটি পরিবর্তনশীল রয়েছে যা জানায় যে সেখানে কতগুলি সতর্কতা রয়েছে alertNo,। আমার প্রশ্নটি হল, যখন আমি একটি নতুন সতর্কতা যুক্ত করতে যাই, তখন কি কোনও alertsঅবজেক্টের মধ্যে সতর্কতা যুক্ত করার কোনও উপায় আছে ?


6
আমি মনে করি আপনার পোস্ট করা জেসন: 1: {অ্যাপ: 'হেলিওরল্ড', 'বার্তা'} => 1: {অ্যাপ: 'হেলিওরল্ড', বার্তা: 'একটি বার্তা' with নিয়ে আপনার সমস্যা আছে?
আন্দ্রেস গ্রেচ

উত্তর:


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' }। এই আপনি ID দ্বারা একটি বার্তা অ্যাক্সেস করতে পারে: 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);

জ্যাকুয়ারির প্রসার ধীর: trevmex.com/post/2531629773/jquerys-extend-is- আস্তে । এছাড়াও, একটি টাইপো আছে। ex। এক্সটেন্ডস () পড়া উচিত $।
কেনে

টাইপোর সাথে ভাল ধরা। এমন পরিস্থিতি রয়েছে যেখানে ex .সীমা বাড়ানো সহায়ক তবে আপনি ঠিক বলেছেন যে এটি সম্ভব হলে এড়ানো উচিত।
শ্রদ্ধাবাদ কোড

1
আমার মনে হয় প্রসারিত () ঠিক আছে যখন আপনার বন্ধনী ব্যতীত শুধুমাত্র একটি রেকর্ড কাঠামো থাকে, বাকি জন্য আমি সম্মানের সাথে একমত হই, কোড, কেবল ধাক্কা () ব্যবহার করুন
এলভেনবাইট

39

আপনি Object.assign () দিয়ে এটি করতে পারেন । কখনও কখনও আপনার অ্যারের প্রয়োজন হয়, তবে কোনও একক জেএসওএন অবজেক্ট যেমন - ওডেটা কল প্রত্যাশা করে এমন ফাংশনগুলির সাথে কাজ করার সময় - আমি এই পদ্ধতিটি কেবল আনপ্যাক করার জন্য অ্যারে তৈরি করার চেয়ে সহজ খুঁজে পেয়েছি।

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.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
হ্যাঁ আমি সম্মত .. প্রশ্নে কোনও বস্তুর অ্যারে নেই এটির কেবল একটি অবজেক্ট তাই এটি সঠিক উত্তর!
কিশান ওজা

এটি যদিও সঠিক উত্তর; আপনি কীভাবে জানতে পারবেন কোন সূচকটি আপনি নতুন অবজেক্ট যুক্ত করতে চলেছেন?
ক্যাপান

1
এটি শিরোনাম প্রশ্নের উত্তর।
ফিস্টঅফফুরি

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

আমি দুঃখিত তবে আমার খ্যাতির কারণে আপনার উত্তরগুলি আমি ইতিমধ্যে মন্তব্য করতে পারি না! ... সুতরাং, আপনি যদি নিজের অবজেক্টের কাঠামো পরিবর্তন করতে চান তবে আপনাকে অবশ্যই এটি করতে হবে থান প্লামার বলে যা , তবে আপনি যদি যত্ন না করেন তবে একটু কৌশল আইটেমটি রাখার জন্য: আপনি যদি সন্নিবেশের জন্য নম্বরটি নির্দিষ্ট না করেন তবে এটি প্রথম অবস্থানে প্রবেশ করা হবে।

এটি দুর্দান্ত যদি আপনি কোনও জসন অবজেক্টকে উদাহরণস্বরূপ একটি মঙ্গোডিবি ফাংশন কলের কাছে যেতে চান এবং আপনি যে শর্তগুলি পেয়েছেন তার মধ্যে একটি নতুন কী সন্নিবেশ করতে চান। এই ক্ষেত্রে আমি আমার কোডের ভিতরে কোনও ভেরিয়েবল থেকে কিছু তথ্য সহ একটি আইটেম মাইআইড onnaোকাতে চাই:

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

আমার যে সমস্যাটি সমাধান করতে হবে তা হ'ল আমার কাছে প্রচুর ইভেন্ট থাকতে পারে এবং সেগুলির একই নাম হবে: লাস্টপোস্টডডেটটাইম যা আলাদা তা হ'ল তারিখ এবং সময়।


-1

এটা চেষ্টা কর:

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

বেশ ভাল কাজ করে, এটি অ্যারের শুরুতে এটি যুক্ত করবে।


এটি কার্যকর হয়নি কারণ আমি কোনও বস্তুর উপর স্প্লাইস কল করতে পারি না, কেবল একটি অ্যারেতে।
রিচার্ড উলফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.