জাভাস্ক্রিপ্ট গ্যারান্টি সম্পত্তি অর্ডার আপত্তি করে?


647

যদি আমি এটির মতো একটি বিষয় তৈরি করি:

var obj = {};
obj.prop1 = "Foo";
obj.prop2 = "Bar";

ফলস্বরূপ অবজেক্টটি কি সর্বদা এরকম দেখাবে?

{ prop1 : "Foo", prop2 : "Bar" }

অর্থাৎ, সম্পত্তিগুলি কি আমি তাদের যুক্ত করেছি একই ক্রমে থাকবে?





1
@ টিজে ক্রাউডার গ্রহণযোগ্য উত্তরটি এখন আর সঠিক নয় কেন আপনি আরও কিছুটা বিশদে যেতে পারেন? আপনি যে প্রশ্নটি সংযুক্ত করেছেন তাতে মনে হয়েছে যে সম্পত্তি অর্ডারটি এখনও প্রতি অনুমান অনুযায়ী গ্যারান্টিযুক্ত নয়।
শূন্য 298

2
@ শূন্য ২৯৮: এই প্রশ্নের গৃহীত উত্তর ES2015 + হিসাবে নির্দিষ্ট সম্পত্তি অর্ডারকে স্পষ্টভাবে বর্ণনা করে । উত্তরাধিকার কার্যকলাপ ( for-in, Object.keys) এটি সমর্থন করার জন্য (আনুষ্ঠানিকভাবে) না থাকে, কিন্তু সেখানে নেই অর্ডার এখন। (অনানুষ্ঠানিকভাবে: ফায়ারফক্স, ক্রোম এবং এজ সকলেই ইন-ইন এবং অবজেক্ট.কিসগুলিতে নির্দিষ্ট অর্ডারটি অনুসরণ করে, যেখানে তাদের আনুষ্ঠানিকভাবে প্রয়োজন হয় না: jsfiddle.net/arhbn3k2/1 )
টিজে

উত্তর:


474

ES2015 সাল থেকে অবজেক্টের জন্য পুনরাবৃত্তির ক্রম একটি নির্দিষ্ট নিয়ম অনুসরণ করে তবে এটি (সর্বদা) সন্নিবেশ ক্রমের অনুসরণ করে না । সহজ কথায়, পুনরাবৃত্তি ক্রমটি স্ট্রিং কীগুলির জন্য সন্নিবেশ ক্রমের সংমিশ্রণ, এবং সংখ্যার মতো কীগুলির জন্য আরোহণের ক্রম:

// key order: 1, foo, bar
const obj = { "foo": "foo", "1": "1", "bar": "bar" }

একটি অ্যারে বা Mapঅবজেক্ট ব্যবহার করা এটি অর্জনের আরও ভাল উপায় হতে পারে। Mapএর সাথে কিছু সাদৃশ্য ভাগ করে Objectএবং ব্যতিক্রম ছাড়াই সন্নিবেশের ক্রমে পুনরাবৃত্তি হওয়া কীগুলি নিশ্চিত করে :

মানচিত্রে কীগুলি অর্ডার করা হয় যখন অবজেক্টে যুক্ত কীগুলি হয় না। সুতরাং, এটির উপরে পুনরাবৃত্তি করার সময়, একটি মানচিত্র অবজেক্ট সন্নিবেশ অনুসারে কীগুলি ফিরিয়ে দেয়। (নোট করুন যে ECMAScript 2015-তে স্পষ্ট বস্তুগুলি স্ট্রিং এবং সিম্বল কীগুলির জন্য ক্রম অর্ডার সংরক্ষণ করে, সুতরাং কেবলমাত্র স্ট্রিং কীগুলির সাহায্যে কোনও বস্তুর আড়াআড়ি কী সন্নিবেশের ক্রমে কী প্রদান করবে)

একটি দ্রষ্টব্য হিসাবে, ES2015 এর আগে অবজেক্টগুলিতে সম্পত্তি অর্ডার দেওয়ার কোনও নিশ্চয়তা ছিল না। ইসমাস্ক্রিপ্ট তৃতীয় সংস্করণ (পিডিএফ) থেকে কোনও অবজেক্টের সংজ্ঞা :

৪.৩.৩ অবজেক্ট

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


পূর্ণসংখ্যা কীগুলির আচরণ সমস্ত ব্রাউজারে সুসংগত নয়। কিছু পুরানো ব্রাউজারগুলি সন্নিবেশ ক্রমে (স্ট্রিং কীগুলির সাহায্যে) এবং কিছুটিকে আরোহী ক্রমে পুনরায় পূর্ণসংখ্যা কীগুলি পুনরাবৃত্তি করে।
ডেভ ডপসন

1
@ ডেভডপসন - ডান - অপ্রচলিত ব্রাউজারগুলি বর্তমান বিশদটি অনুসরণ করে না, কারণ সেগুলি আপডেট হয়নি updated
টিজে ক্রাউডার

199

হ্যাঁ (পূর্ণসংখ্যার কীগুলির জন্য)।

বেশিরভাগ ব্রাউজারগুলি বস্তুর বৈশিষ্ট্যগুলি পুনরাবৃত্তি করে:

  1. আরোহী ক্রমে পূর্ণসংখ্যা কীগুলি (এবং "1" এর মতো স্ট্রিংগুলি যেগুলি ইনট হিসাবে পার্স করে)
  2. স্ট্রিং কীগুলি, সন্নিবেশ ক্রমে (ES2015 এটি এবং সমস্ত ব্রাউজারগুলি মেনে চলার গ্যারান্টি দেয়)
  3. সিম্বল নামগুলি, সন্নিবেশ ক্রমে (ES2015 এটি এবং সমস্ত ব্রাউজারগুলি মেনে চলার গ্যারান্টি দেয়)

কিছু পুরানো ব্রাউজারগুলি # 1 এবং # 2 বিভাগগুলিকে একত্র করে, সমস্ত কীগুলি সন্নিবেশ ক্রমে পুনরাবৃত্তি করে। যদি আপনার কীগুলি পূর্ণসংখ্যা হিসাবে পার্স করতে পারে তবে কোনও নির্দিষ্ট পুনরাবৃত্তির ক্রমের উপর নির্ভর না করা ভাল।

ইন্টিজার (যেমন "7" বা "99") হিসাবে পার্স করা কীগুলির ক্ষেত্রে বাদ দিয়ে বর্তমান ভাষা স্পেস (ES2015 সাল থেকে) সন্নিবেশ ক্রম সংরক্ষণ করা হয়েছে, যেখানে ব্রাউজারগুলির মধ্যে আচরণের পরিবর্তিত হয়। উদাহরণস্বরূপ, কীগুলি সংখ্যাসূচক হিসাবে পার্স করার সময় Chrome / V8 সন্নিবেশ ক্রমের সম্মান করে না।

ওল্ড ল্যাঙ্গুয়েজ স্পেস (ES2015 এর আগে) : আইট্রেশন অর্ডারটি প্রযুক্তিগতভাবে সংজ্ঞায়িত ছিল না, তবে সমস্ত বড় ব্রাউজারগুলি ES2015 আচরণের সাথে সম্মতি জানায়।

মনে রাখবেন যে ES2015 আচরণটি ভাষা আচরণের একটি ভাল উদাহরণ ছিল যা বিদ্যমান আচরণ দ্বারা চালিত হয়েছিল, অন্যভাবে নয় not পিছনের দিকে সামঞ্জস্যের মানসিকতার আরও গভীর ধারণা পেতে, http://code.google.com/p/v8/issues/detail?id=164 দেখুন , একটি ক্রোম বাগ যা ক্রোমের পুনরাবৃত্তি আদেশ আচরণের পিছনে নকশার সিদ্ধান্তগুলি বিশদভাবে কভার করে । সেই বাগ রিপোর্ট সম্পর্কে একের (বরং মতামতযুক্ত) মন্তব্য:

স্ট্যান্ডার্ড সর্বদা বাস্তবায়নগুলি অনুসরণ করে, সেখান থেকে এক্সএইচআর এসেছে এবং গুয়ারগুলি একই পদ্ধতিতে গিয়ারগুলি প্রয়োগ করে এবং তারপরে সমতুল্য HTML5 কার্যকারিতা গ্রহণ করে। সঠিক সমাধানটি হ'ল ইসিএমএ-র আনুষ্ঠানিকভাবে ডি-ফ্যাক্টো স্ট্যান্ডার্ড আচরণটি অনুমানের পরবর্তী রেভের সাথে অন্তর্ভুক্ত করা উচিত।


2
@ বেনজামিন গ্রুয়েনবাউম - এটাই আমার বক্তব্য। 2014 পর্যন্ত সমস্ত বড় বিক্রেতাদের একটি সাধারণ বাস্তবায়ন ছিল এবং সুতরাং মানগুলি অবশেষে অনুসরণ করবে (অর্থাত্ 2015-এ)।
ডেভ ডপসন

2
উপায় দ্বারা: প্রতিক্রিয়া createFragmentএপিআই ইতিমধ্যে এটির উপর নির্ভর করে ... m
মিক

7
@ BenjaminGruenbaum- এ আপনার মন্তব্য মিথ্যা। ES2015 এ অর্ডার কেবলমাত্র নির্বাচিত পদ্ধতির জন্য গ্যারান্টিযুক্ত । দেখুন উত্তর এর ftor নিচে।
পাইটর ডব্রোগোস্ট

82

সাধারণ বিষয়গুলিতে সম্পত্তি অর্ডার জাভাস্ক্রিপ্টে একটি জটিল বিষয়।

যদিও ES5 তে স্পষ্টভাবে কোনও অর্ডার নির্দিষ্ট করা হয়নি, কিছু ক্ষেত্রে ES2015 এর একটি আদেশ রয়েছে। প্রদত্ত নিম্নলিখিত অবজেক্টটি দেওয়া হল:

o = Object.create(null, {
  m: {value: function() {}, enumerable: true},
  "2": {value: "2", enumerable: true},
  "b": {value: "b", enumerable: true},
  0: {value: 0, enumerable: true},
  [Symbol()]: {value: "sym", enumerable: true},
  "1": {value: "1", enumerable: true},
  "a": {value: "a", enumerable: true},
});

এটি নিম্নলিখিত আদেশে (কিছু ক্ষেত্রে) এর ফলাফল:

Object {
  0: 0,
  1: "1",
  2: "2",
  b: "b",
  a: "a",
  m: function() {},
  Symbol(): "sym"
}
  1. আরোহী ক্রমে পূর্ণসংখ্যার মতো কীগুলি
  2. সন্নিবেশ ক্রমে সাধারণ কী
  3. সন্নিবেশ ক্রমে চিহ্ন

সুতরাং, এখানে তিনটি বিভাগ রয়েছে, যা সন্নিবেশ ক্রমকে (যেমন উদাহরণে ঘটেছে) পরিবর্তন করতে পারে। এবং পূর্ণসংখ্যার মতো কীগুলি সন্নিবেশ ক্রমটি মোটেই আটকে থাকে না।

প্রশ্নটি হল, কোন পদ্ধতিগুলির জন্য এই আদেশটি ES2015 স্পেসে গ্যারান্টিযুক্ত?

নিম্নলিখিত পদ্ধতিগুলি দেখানো আদেশটির গ্যারান্টি দেয়:

  • Object.assign
  • Object.defineProperties
  • Object.getOwnPropertyNames
  • Object.getOwnPropertySymbols
  • Reflect.ownKeys

নিম্নলিখিত পদ্ধতি / লুপগুলি কোনও আদেশের গ্যারান্টি দেয়:

  • Object.keys
  • এ জন্য
  • JSON.parse
  • JSON.stringify

উপসংহার: এমনকি ES2015 এ আপনার জাভাস্ক্রিপ্টে সাধারণ বস্তুর সম্পত্তি ক্রমের উপর নির্ভর করা উচিত নয়। এটি ত্রুটির ঝুঁকির মধ্যে রয়েছে। Mapপরিবর্তে ব্যবহার করুন।


আমি মোটামুটি নোড v8.11 এ উপসংহারটি পরীক্ষা করেছি এবং এটি সঠিক is
Merlin.ye

1
@ বেনজামিন গ্রুয়েনবাউম কোন চিন্তাভাবনা করেছেন?
বিবর্তনবক্স

অবজেক্ট.এন্ট্রিগুলি পূর্ণসংখ্যার বিধি অনুসরণ করে আদেশের গ্যারান্টি দেয়
মোজিমি

1
"ES2015 এ এমনকি আপনার জাভাস্ক্রিপ্টে সাধারণ বস্তুর সম্পত্তি ক্রমের উপর নির্ভর করা উচিত নয় It এটির পরিবর্তে মানচিত্রটি ব্যবহার করুন" " সম্মতি যখন দ্বিধায়িত হয় আপনি সম্পত্তি অর্ডারের উপর নির্ভর করতে পারবেন না। আপনার যদি পুরানো ব্রাউজারগুলি সমর্থন করতে হয় তবে আপনি কীভাবে পিছনের তুলনার জন্য এটি পরীক্ষা করেন?
শূন্য 298

1
এটি সম্পর্কে কোনও অফিসিয়াল ডকুমেন্টেশন বা রেফারেন্স আছে?
বীট করুন

66

লেখার সময়, বেশিরভাগ ব্রাউজারগুলি যেমন inোকানো হয়েছিল ঠিক একই ক্রমে সম্পত্তিগুলি ফিরিয়েছিল, তবে এটি স্পষ্টতই গ্যারান্টিযুক্ত আচরণ ছিল না তাই নির্ভর করা উচিত হয়নি।

এর নাম ECMAScript স্পেসিফিকেশন বলতঃ

বৈশিষ্ট্যগুলি গণনা করার মেকানিক্স এবং ক্রম ... নির্দিষ্ট করা হয়নি।

তবে ES2015 এবং পরে অ-পূর্ণসংখ্য কীগুলি সন্নিবেশ ক্রমে ফিরে আসবে।


16
ক্রোম অন্য ব্রাউজারগুলিতে আলাদা অর্ডার প্রয়োগ করে। কোড. google.com/p/v8/issues/detail?id=164
টিম ডাউন

9
অপেরা 10.50 এবং তত উপরে এবং পাশাপাশি আই 99 ক্রোমের আদেশের সাথে মেলে। ফায়ারফক্স এবং সাফারি এখন সংখ্যালঘু (এবং তাদের উভয়ই অবজেক্টস / অ্যারেগুলির জন্য পৃথক আদেশও ব্যবহার করে)।
gsnedders

1
@ বেভারেকের অর্ডার সম্পর্কে সুস্পষ্টভাবে কোনও গ্যারান্টি নেই তাই আদেশটি কার্যকরভাবে এলোমেলোভাবে করা উচিত বলে মনে করা উচিত।
আলনিটাক

1
@ ভিভারকে না, আদেশটি অনুমানযোগ্য এমন কিছু নয়। এটি বাস্তবায়ন নির্ভরতা এবং যে কোনও সময়ে পরিবর্তিত সাপেক্ষে, এবং প্রতিবার আপনার ব্রাউজার নিজেই আপডেট হওয়ার পরে (উদাহরণস্বরূপ) পরিবর্তন করতে পারে।
Alnitak

3
এই উত্তরটি ES2015 এ মিথ্যা।
বেনজামিন গ্রুয়েনবুম

42

এই পুরো উত্তরটি নির্দিষ্ট মেনে চলার প্রসঙ্গে, কোনও নির্দিষ্ট ইঞ্জিন বা atতিহাসিকভাবে কোনও ইঞ্জিন কী করে তা নয়।

সাধারণত, না

আসল প্রশ্নটি খুব অস্পষ্ট।

বৈশিষ্ট্যগুলি কীভাবে আমি তাদের যুক্ত করেছিলাম সেভাবে হবে

কোন প্রসঙ্গে?

উত্তরটি: এটি বিভিন্ন কারণের উপর নির্ভর করে। সাধারণভাবে, না

কখনও কখনও হ্যাঁ

এখানে আপনি সমভূমি জন্য সম্পত্তি কী অর্ডার গণনা করতে পারেন Objects:

  • ES2015 অনুবর্তী ইঞ্জিন
  • নিজস্ব সম্পত্তি
  • Object.getOwnPropertyNames(), Reflect.ownKeys(),Object.getOwnPropertySymbols(O)

সমস্ত ক্ষেত্রে এই পদ্ধতিগুলির মধ্যে অ-অঙ্কেরযোগ্য সম্পত্তি কী এবং অর্ডার কীগুলি নির্দিষ্ট করে [[OwnPropertyKeys]](নীচে দেখুন) অন্তর্ভুক্ত। তারা মূল মানগুলির ধরণের ( Stringএবং / অথবা Symbol) অন্তর্ভুক্ত করে । এই প্রসঙ্গে Stringপূর্ণসংখ্যার মানগুলি অন্তর্ভুক্ত।

Object.getOwnPropertyNames(O)

রিটার্নস Oর নিজস্ব String-keyed বৈশিষ্ট্যাবলী ( অবস্থায় বৈশিষ্টগুলির নাম )।

Reflect.ownKeys(O)

রিটার্নস Oর নিজস্ব String- এবং Symbol-keyed বৈশিষ্ট্য।

Object.getOwnPropertySymbols(O)

Oনিজস্ব Symbolকৌতুকপূর্ণ বৈশিষ্ট্য ফেরত দেয় ।

[[OwnPropertyKeys]]

ক্রমটি মূলত: Stringsক্রমবর্ধমান ক্রমে পূর্ণসংখ্যার মতো, ক্রম বিন্যাসে অ-পূর্ণসংখ্যার মতো Strings, ক্রম ক্রমের প্রতীক। কোন ফাংশনটি এটি আহ্বান করে তার উপর নির্ভর করে এই ধরণের কয়েকটি অন্তর্ভুক্ত করা যাবে না।

নির্দিষ্ট ভাষাটি হ'ল কীগুলি নিম্নলিখিত ক্রমে ফিরে আসে:

  1. ... আরোহণের সংখ্যার সূচক ক্রমের সাথে [প্রতিটি বস্তুর পুনরাবৃত্তি হচ্ছে] Pএর নিজস্ব সম্পত্তি কী Oযা একটি পূর্ণসংখ্যা সূচক হয়

  2. ... প্রতিটি নিজস্ব সম্পত্তি কী Pএর Oযে একটি স্ট্রিং কিন্তু একটি পূর্ণসংখ্যা সূচক, সম্পত্তি সৃষ্টি অনুক্রম হল

  3. ... প্রতিটি নিজস্ব সম্পত্তি কী Pএর Oএকটি সাংকেতিক, সম্পত্তি সৃষ্টি অনুক্রম হল

Map

যদি আপনি অর্ডার করা মানচিত্রে আগ্রহী হন তবে আপনার Mapপ্লেইনের পরিবর্তে ES2015 এ প্রবর্তিত প্রকারটি ব্যবহার করা উচিত Objects


13

আধুনিক ব্রাউজারগুলিতে আপনি Mapকোনও অবজেক্টের পরিবর্তে ডেটা স্ট্রাকচার ব্যবহার করতে পারেন ।

বিকাশকারী মোজিলা> মানচিত্র

একটি মানচিত্র অবজেক্ট তার উপাদানগুলি সন্নিবেশ ক্রমে পুনরাবৃত্তি করতে পারে ...


7

ES2015-এ, এটি করে তবে আপনি যা ভাবেন তা নয়

ES2015 অবধি কোনও অবজেক্টে কীগুলির ক্রমের নিশ্চয়তা ছিল না। এটি বাস্তবায়ন সংজ্ঞায়িত ছিল।

তবে ES2015-এ নির্দিষ্ট করা হয়েছিল । জাভাস্ক্রিপ্টের অনেকগুলি জিনিসের মতো, এটি সামঞ্জস্যের উদ্দেশ্যে করা হয়েছিল এবং সাধারণত বেশিরভাগ জেএস ইঞ্জিনগুলির মধ্যে বিদ্যমান একটি বেসরকারী মানকে প্রতিফলিত করে (আপনি জানেন-কে ব্যতিক্রম ছিলেন)।

অর্ডারটি স্পষ্টে সংজ্ঞায়িত করা হয়, অ্যাবস্ট্রাক্ট অপারেশন অর্ডিনারিউনপ্রোপার্টিকিসের অধীনে , যা কোনও অবজেক্টের নিজস্ব কীগুলির সাহায্যে পুনরাবৃত্তি করার সমস্ত পদ্ধতিকে অন্তর্ভুক্ত করে। প্যারাফ্রেসড, ক্রমটি নিম্নরূপ:

  1. সকল পূর্ণসংখ্যা সূচক কি-সংকলন (ভালো জিনিস "1123", "55"সাংখ্যিক অর্ডার আরোহী মধ্যে, ইত্যাদি)।

  2. সমস্ত স্ট্রিং কীগুলি যা ক্রমানুসারে সূচকগুলি নয়, ক্রমানুসারে (প্রাচীনতম) first

  3. সমস্ত প্রতীক কী, ক্রমানুসারে (প্রাচীনতম) est

অর্ডারটি বিশ্বাসযোগ্য নয় - এটি নির্ভরযোগ্য ly এটি নির্ভরযোগ্য, সম্ভবত আপনি যা চান তা সম্ভবত নয় এবং আধুনিক ব্রাউজারগুলি এই আদেশটি সঠিকভাবে প্রয়োগ করে।

কিছু ব্যতিক্রমগুলির মধ্যে উত্তরাধিকার সূত্রে প্রাপ্ত কীগুলি গণনা করার পদ্ধতি অন্তর্ভুক্ত থাকে যেমন for .. inলুপ। for .. inলুপ স্পেসিফিকেশন অনুযায়ী অর্ডার নিশ্চয়তা দেয় না।


7

ES2015 হিসাবে, সম্পত্তি আদেশের পুনরাবৃত্তি নির্দিষ্ট পদ্ধতির জন্য গ্যারান্টিযুক্ত। কিন্তু অন্যদের । দুর্ভাগ্যক্রমে, যে পদ্ধতিগুলি অর্ডার দেওয়ার গ্যারান্টিযুক্ত নয় সেগুলি সাধারণত সবচেয়ে বেশি ব্যবহৃত হয়:

  • Object.keys, Object.values,Object.entries
  • for..in লুপ
  • JSON.stringify

কিন্তু ES2020 হিসাবে, এই পূর্বে অবিশ্বাসযোগ্য পদ্ধতি জন্য সম্পত্তি অর্ডার হবে স্পেসিফিকেশন দ্বারা নিশ্চিত করা , অন্যদেরও একই নির্ণায়ক পদ্ধতিতে ধরে iterated করা থেকে কারণে সমাপ্ত : প্রস্তাব বলবিজ্ঞান জন্য-

গ্যারান্টিযুক্ত পুনরাবৃত্তি ক্রম (যেমন Reflect.ownKeysএবং Object.getOwnPropertyNames) এর পদ্ধতিগুলির মতো , পূর্ব-অনির্দিষ্ট পদ্ধতিগুলিও নিম্নলিখিত ক্রমে পুনরাবৃত্তি করবে:

  • আরোহিত সংখ্যার ক্রমে সংখ্যার অ্যারে কীগুলি
  • সন্নিবেশ ক্রমে অন্যান্য সমস্ত চিহ্নবিহীন কীগুলি
  • সিম্বল কীগুলি, সন্নিবেশ ক্রমে

প্রতিটি বাস্তবায়ন ইতিমধ্যে এটি বেশ কার্যকরভাবেই করে (এবং বহু বছর ধরে এটি করেছে) তবে নতুন প্রস্তাবটি এটি অফিসিয়াল করেছে।

যদিও বর্তমান স্পেসিফিকেশনটি..... পুনরাবৃত্তির আদেশের জন্য ছেড়ে যায় " প্রায় সম্পূর্ণ অনির্ধারিত , বাস্তব ইঞ্জিনগুলি আরও ধারাবাহিক হতে থাকে:"

ইসিএমএ -২2২ তে সুনির্দিষ্টতার অভাব বাস্তবে প্রতিফলিত করে না। আলোচনায় কয়েক বছর পিছিয়ে যাওয়ার পরে, বাস্তবায়নকারীরা পর্যবেক্ষণ করেছেন যে অভ্যর্থনার আচরণে কিছু বাধা রয়েছে যা ওয়েবে কোড চালাতে চায় এমন যে কোনও ব্যক্তিকে অনুসরণ করা প্রয়োজন।

যেহেতু প্রতিটি প্রয়োগ ইতিমধ্যে প্রত্যাশিত বৈশিষ্ট্যগুলির উপরে পুনরাবৃত্তি করে, পিছনে সামঞ্জস্যতা ভঙ্গ না করে এটিকে স্পেসিফিকেশনে রাখা যেতে পারে।


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

বস্তুটি পুনরাবৃত্তি হতে পারে না বা এর প্রোটোটাইপ চেইনের কোনও কিছুই প্রক্সি, টাইপযুক্ত অ্যারে, মডিউল নেমস্পেস বস্তু বা হোস্ট বহিরাগত বস্তু নয়।

প্রোটোটাইপ শৃঙ্খলে থাকা কোনও বস্তু বা কিছুই এর পুনরাবৃত্তির সময় এর প্রোটোটাইপ পরিবর্তন করে না।

এর প্রোটোটাইপ শৃঙ্খলে অবজেক্ট বা কোনও কিছুতেই পুনরাবৃত্তির সময় কোনও সম্পত্তি মুছে ফেলা হয়নি।

পুনরাবৃত্তির সময় অবজেক্টের প্রোটোটাইপ চেইনের কোনও কিছুইতেই কোনও সম্পত্তি যুক্ত হয় না।

প্রোটোটাইপ শৃঙ্খলে থাকা কোনও বস্তুর বা কোনও জিনিসের পুনরাবৃত্তির সময় এর গণনা পরিবর্তন হয় না।

কোনও অ-গণনাযোগ্য সম্পত্তি কোনও গণ্যমানের ছায়া নেই।


5

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

var myarr = [{somfield1: 'x', somefield2: 'y'},
{somfield1: 'a', somefield2: 'b'},
{somfield1: 'i', somefield2: 'j'}];

এইভাবে আপনি লুপের জন্য একটি নিয়মিত ব্যবহার করতে পারেন এবং সন্নিবেশ ক্রম রাখতে পারেন। এরপরে প্রয়োজনে নতুন এরে এটিকে সাজানোর জন্য আপনি অ্যারে বাছাই পদ্ধতিটি ব্যবহার করতে পারেন।


3

সবেমাত্র এটি হার্ড উপায় খুঁজে পেয়েছি।

রেডাক্সের সাথে প্রতিক্রিয়া ব্যবহার করে, বাচ্চাদের উত্সাহিত করার জন্য আমি যে কীগুলির কীগুলি চালিত করতে চাইছি তার স্টোরটি প্রতিবারই রিফ্রেশ হয় (রেডাক্সের অপরিবর্তনীয় ধারণার অনুসারে) per

এইভাবে, Object.keys(valueFromStore)আমি ব্যবহার করার জন্য Object.keys(valueFromStore).sort(), যাতে আমার কমপক্ষে এখন কীগুলির জন্য বর্ণানুক্রমিক ক্রম থাকে।


-7

থেকে তাদেরকে JSON মান :

একটি অবজেক্ট হ'ল শূন্য বা আরও বেশি নাম / মান জোড়ার একটি আনর্ডারড সংগ্রহ, যেখানে একটি নাম একটি স্ট্রিং এবং মান একটি স্ট্রিং, সংখ্যা, বুলিয়ান, নাল, বস্তু বা অ্যারে ray

(জোর আমার)।

সুতরাং, না আপনি আদেশের গ্যারান্টি দিতে পারবেন না।


7
এটি ECMAScript স্ট্যান্ডার্ড দ্বারা সুনির্দিষ্ট করা হয়েছে - JSON স্পেক দ্বারা নয়।
আলনিটাক

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