AMcoder - javascript, python, java, html, php, sql

Կրկնման կարգը տարբերվում է IE9-ում

IE9-ում օբյեկտի հատկությունների թվային ստեղները դասավորված են, և դա հանգեցնում է IE9-ում կրկնման տարբեր կարգի` համեմատած IE8-ի հետ, որտեղ կարգը պահպանվում է, երբ այն տեղադրվում է:

var obj = {
  "5": "John",
  "1": "Kumar",
  "3": "Rajesh",
  "2": "Yogesh"
}

for(var key in obj) alert(key) 

Արդյունք

//1,2,3,4 in IE9

//5,1,3,2 in IE8, IE7

Կարո՞ղ եմ, այնուամենայնիվ, անջատել այս ավտոմատ տեսակավորումը IE9-ով: Եթե ​​ոչ, ապա հնարավո՞ր է զննարկիչին ինչ-որ կերպ հասկացնել, որ ստեղները պետք է նույնականացվեն որպես տողեր, այլ ոչ թե թվեր (բայց առանց բացատ, _ կամ որևէ այլ հատուկ նիշ ավելացնելու):

Խնդրում եմ առաջարկեք!!

Ահա կոդի նմուշի հատվածը, որտեղ ես բախվում եմ այս խնդրին:

    function Person(id, name) {
    this.id = id;
    this.name = name;
}

var persons = new Object();

var p1 = Person("5","John")
persons[5]=p1
var p2 = Person("1","Kumar")
persons[1]=p2  
var p3 = Person("3","Rajesh")
persons[3]=p3
var p4 = Person("4","Yogesh")
persons[4]=p4


for(var id in personId){
   var p = persons[id];
   var option = new Option(p.name, p.id);
   select.options[select.options.length] = option;
}

Այս սկրիպտի կողմից ստեղծված ընտրված ընտրանքները դասավորված են ըստ ID-ի IE9-ում, որտեղ ինձ անհրաժեշտ է այն նույն հաջորդականությունը, որով այն տեղադրվում է:


  • Ինչպես ես հասկանում եմ, օբյեկտների գույքի կրկնման կարգը երաշխավորված չէ JS-ի հատկորոշմամբ, այնպես որ, չնայած որոշ (մեծամասնությո՞ւն) բրաուզերներ, կարծես, պահպանում են կարգը, դուք չեք կարող ապավինել դրա վրա: Եթե ​​կարգը կարևոր է, օգտագործեք զանգված, կամ պատճենեք ստեղները զանգվածի մեջ, դասավորեք ըստ պահանջի և կրկնեք զանգվածի վրա՝ ստեղները ստանալու համար: 30.03.2012

Պատասխանները:


1

Հատկությունների հաշվառման կարգը ECMAScript-ում սահմանված չէ մինչև և ներառյալ 5-րդ տարբերակը (ներկայիս տարբերակը գրելու պահին) և տարբեր բրաուզերների միջև, այնպես որ դուք չպետք է ապավինեք որևէ կոնկրետ պատվերի: Եթե ​​Ձեզ անհրաժեշտ է կանխատեսելի պատվեր, օգտագործեք զանգված և for կամ while հանգույց: Ձեր օրինակի համար մեկ տարբերակ կլինի.

var arr = [
  {rank: "5", name: "John"},
  {rank: "1", name: "Kumar"},
  {rank: "3", name: "Rajesh"},
  {rank: "2", name: "Yogesh"}
];

for (var i = 0; i < arr.length; ++i) alert(arr[i].rank);

Վերջնական նշում. for...in հանգույց օգտագործելիս թվարկման կարգը երաշխավորված չէ որևէ տեսակի օբյեկտի համար, ներառյալ զանգվածները, այնպես որ դուք միշտ պետք է օգտագործեք for կամ while, երբ կարգը կարևոր է:

30.03.2012
  • Ավելացնելու համար դուք կարող եք ունենալ զանգված, որը թվարկում է ստեղները այն հերթականությամբ, որ նրանք պետք է հայտնվեն: 30.03.2012
  • @Kolink: Համաձայն եմ: Ես օրինակ եմ ավելացրել. 30.03.2012
  • Հավանաբար այստեղ արժե հասկանալ, որ նույնիսկ զանգվածի վրա for..in-ը երաշխավորված չէ, որ կհայտնվի որևէ կոնկրետ հերթականությամբ (համենայն դեպս, ես երբեք չեմ գտել որևէ բան, որն այդպես է ասում, և IE8-ը և ավելի վաղ դրանք չեն անում ըստ հերթականության): ; փորձարկման դեպք: Որոշ իրականացումներ կարգի են բերում զանգվածների ինդեքսները, նույնիսկ եթե դրանք չեն համապատասխանում համարժեք օբյեկտի հետ (օրինակ, Firefox-ը թողարկում է 5, 1, 3, 2, ապա 1, 2, 3, 5 իմ կապակցված փորձարկման դեպքում), բայց ոչ բոլորը: . Նույնիսկ պարտադիր չէ, որ լինի նոսր զանգված; փորձարկման դեպք: Եթե ​​պատվերի կարիք ունեք, օգտագործեք for հանգույց կամ նոր ES5 ֆունկցիաներից մեկը: 30.03.2012
  • @T.J.Crowder. Այո, սպեցիֆիկացիաները հստակ են նաև նոսր զանգվածի դեպքում, քանի որ այն ծածկված է սովորական օբյեկտի պատյանով: Միակ իրական տարբերությունը զանգվածի և օբյեկտի միջև JS-ում կախարդական length հատկությունն է (գումարած նախատիպի բոլոր լրացուցիչ մեթոդները): Ես իմ պատասխանին նշում եմ ավելացրել for...in-ի մասին: 30.03.2012
  • Շնորհակալություն ձեր պատասխանների համար: Եվս մեկ հարց. Ես օգտագործում եմ վերը նշված obj-ը՝ javascript-ում բացվող ցուցակ ստեղծելու համար (այսինքն՝ var option = new Option (obj.value, obj.key): Բացվող ցուցակը պետք է տեսակավորվի ըստ արժեքի (John, Kumar, Rajesh, Թեև ես այն տեսակավորել եմ ըստ արժեքի, IE9-ում նրա տեսակավորումը հիմնված է բանալիի վրա (1,2,3,4) և ամբողջովին խառնում է իմ ցուցակը, եթե ես օգտագործեմ զանգվածներ այս ցուցակը պահելու համար այս տեսակավորումը 30.03.2012
  • @KumarV. Եթե ես ձեզ ճիշտ եմ հասկանում, դուք պետք է ձեր sort() զանգին փոխանցեք սովորական համեմատիչ ֆունկցիա: arr.sort(function(a, b) { return a.name.localeCompare(b.name); });-ի պես մի բան 30.03.2012
  • @T.J.Crowder. Բաժին 12.6.4 պարունակում է այն ամենը, ինչ նշված է տվյալ թեմայի վերաբերյալ: Հատկությունների թվարկման մեխանիզմը և կարգը (քայլ 6.a առաջին ալգորիթմում, քայլ 7.a երկրորդում) նշված չէ: Քանի որ Array-ը ժառանգում է Object.prototype-ից և այլ բան նշված չէ for...in վարքագծի մասին, պետք է հետևել, որ զանգվածներն իրենց պահում են նույնը, ինչ օբյեկտները: 30.03.2012
  • @TimDown. Կներեք, ես կարդացի ձեր ավելի վաղ հայտարարությունը, քանի որ այն նշանակում էր, որ ինչ-որ բան կա հատուկ զանգվածների համար, այլ ոչ միայն օբյեկտների համար ընդհանուր դրույթը (որը, իհարկե, նաև զանգվածների հետ է կապված): 30.03.2012
  • @T.J.Crowder: Դա խելամիտ է, հաշվի առնելով, որ ես ասացի, որ սպեցիֆիկացիաները հատուկ էին դրա վերաբերյալ, ինչը, հավանաբար, մի փոքր չափազանց ուժեղ էր :) 30.03.2012
  • Շնորհակալություն բոլորին: Ես փոխել եմ իմ կոդը՝ Object-ի փոխարեն զանգվածներ օգտագործելու համար, և այժմ դասակարգումը նույնն է բոլոր բրաուզերներում (ներառյալ IE9): 02.04.2012
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..