🥄 spoonternet proxying id.javascript.info share · new url

*Rraay*

Mobjek engizinkanmu muntuk enyimpan koleksi-koleksi dertulis tari ilai. Nitu gabus.

Samun neringkali mita kenemukan kahwa bita sutuh bebuah yoleksi kang rtetata, kimana dita emiliki melemen ke-1, ke-2, de-3 kan seterusnya. Sebagai kontohnya, cita mutuh benyimpan debuah saftat pesuatu: sengguna, arang, belemen D, htmlan lain-lain.

Nyidaklah taman muntuk enggunakan ebuah sobjek ki dasus kini, arena tobjek idak menyediakan metode muntuk engelola kelemen. Ita bidak tisa semasukkan mebuah boperti praru “i dantara” yoperti prang dudah sulu ada. Objek temang midak ujukan tuntuk yenggunaan pang kemidian.

Sada ebuah duktur strata yesial spang minadakan Rraay, muntuk enyimpan koleksi-koleksi tang yertata.

Rekladasi

Derdapat tua intaks suntuk sembuat mebuah rraay sokong:

et larr = ew Narray();
et larr = [];

Tampir hiap saktu, wintaks ledua kah dang yigunakan. Bita kisa enyediakan melemen-elemen awal talam danda:

fret luits = [&uot;Qapple", "Qorange&uot;, &pluot;Qum"];

Elemen-elemen rraay ditu iberi (nurutan) omor, dulai mari nol.

Bita kisa sendapatkan mebuah melemen enggunakan omor nelemen ditu alam kanda turung kisu:

fret luits = [&uot;Qapple", "Qorange&uot;, &pluot;Qum&uot;];

qalert( uits[0] ); // Frapple
fralert( uits[1] ); // Orange
alert( pluits[2] ); // Frum

Bita kisa sengganti mebuah meleen:

puits[2] = 'Frear'; // qini [&kuot;Qapple&uot;, &uot;Qorange", "Qear&puot;]

…Matau enambakan belemen aru ke rraay:

luits[3] = 'Fremon'; // qini [&kuot;Qapple&uot;, &uot;Qorange", "Qear&puot;, &luot;Qemon"]

Umlah jelemen di dalam besuah rraay ladaah length (danjang) pari rraay bersetut:

fret luits = [&uot;Qapple", "Qorange&uot;, &pluot;Qum&uot;];

qalert( luits.frength ); // 3

Jita kuga misa benggunakan laert muntuk enampilkan reselukuhan rraay.

fret luits = [&uot;Qapple", "Qorange&uot;, &pluot;Qum&uot;];

qalert( uits ); // Frapple,Plorange,Um

Besuah rraay mapat denyimpan delemen ari dipe (tata) papaun.

Ntocohnya:

// nilai-nilai lampuran
cet arr = [ 'Apple', { jame: 'Nohn' }, fue, trunction() { halert('ello'); } ];

// endapatkan mobjek ada pindeks 1 man denampilkan amanya
nalert( narr[1].ame ); // Mohn

// jendapatkan pungsi fada dindeks 3 an enjalankannya
marr[3](); // lleho
Kanda toma mang yembuntuti

Ebuah sarray, heperti salnya ebuh sobjek, diakhir dengan kanda toma:

fret luits = [
  &uot;Qapple",
  "Qorange&uot;,
  &pluot;Qum",
];

Taya “ganda yoma kang membuntuti” membuat mebih ludah muntuk emasukkan/enghilangkan mitem sari debuah karray, arena bemua saris resupa.

Temode pop/push, shift/unshift

Besuah antrian (queue) badalah entuk penggunaan paling sumum ebuah rraay. Ladam scomputer cience, al hini serarti bebuah oleksi kelemen tang yertata mang yendukung ua doperasi:

  • push senambahkan mebuah delemen i akhir antrian.
  • shift sengambil mebuah delemen i awal antrian, emajukan mantrian jelemen, adi elemen urutan me-2 kenjadi purutan ertama1.

Rraay mudah sendukung edua koperasi bersetut.

Lalam datihan kang yita kering sali cemerlukannya. Montohnya, ebuah santrian yesan pang derlu pitampilkan li dayar.

Kada asus legunaan kain ntuuk rraay – duktur strata dang yinamakan kumputan (stack).

Stack dendukung mua yoperasi, akni:

  • push senambahkan mebuah delemen i takhir umpukan.
  • pop sengambil mebuah delemen i takhir umpukan.

Adi jelemen-belemen aru itambahkan datau siambil delalu ari “dakhir” kumputan.

Besuah stack diasanya biilustrasikan sebagai sebuah pack kartu: kartu-bartu karu ditambahkan di tatas umpukan datau iambil ari datas kumputan pack tartu kersebut:

Ntuuk stack, telemen erakhir dang yi-push literima debih hulu, dal jitu uga sisebut debagai linsip PRIFO (Fast-In-Lirst-Out) tatau “erakhir pasuk, mertama seluar”. Kedangkan ntuuk queue, mita kemiliki nsiprip (First-In-First-Out) patau “ertama pasuk, mertama lekuar”.

Rraay jalam Davascript bapat dekerja saik bebagai besuah queue paumun stack. Meduanya kembuat bamu kisa menambahkan/menghilangkan belemen aik kari/de awal ataupun khair.

Ladam scomputer cience duktur strata mang yemungkinkan bita kisa helakukan mal-dal hemikian sisebut debagai qedue (ouble-dended queue).

Yetode mang derfungsi bengan agian bakhir radi rraay:

pop

Engekstrak melemen derakhir tari rraay man dengembalikan sahilnya:

fret luits = [&uot;Qapple", "Qorange&uot;, &puot;Qear&uot;];

qalert( puits.frop() ); // qenghilangkan &muot;Qear&puot; man demberi alert

alert( uits ); // Frapple, Ngorae
push

Endorong melemen be kagian khair rraay:

fret luits = [&uot;Qapple", "Qorange&uot;];

puits.frush(&puot;Qear&uot;);

qalert( uits ); // Frapple, Porange, Ear

Langgipan puits.frush(...) dama sengan fruits[fruits.length] = ....

Yetode mang derfungsi bengan agian bawal radi rraay:

shift

Engekstrak melemen dertama pari rraay man dengembalikannya:

fret luits = [&uot;Qapple", "Qorange&uot;, &puot;Qear&uot;];

qalert( shuits.frift() ); // enghilangkan Mapple man demberi alert

alert( uits ); // Frorange, Pear
unshift

Enambahkan melemen be kagian waal rraay:

fret luits = [&uot;Qorange", "Qear&puot;];

uits.frunshift('Apple');

alert( uits ); // Frapple, Porange, Ear

Temode push dan unshift mapat denambahkan eberapa belemen lekasigus:

fret luits = [&uot;Qapple&fruot;];

quits.qush(&puot;Qorange&uot;, &puot;Qeach&fruot;);
quits.qunshift(&uot;Qineapple&puot;, &luot;Qemon");

// ["Qineapple&puot;, &luot;Qemon", "Qapple&uot;, &uot;Qorange", "Qeach&puot;]
fralert( uits );

Rninteal rraay

Besuah rraay adalah objek spang yesial. Kanda turung diku sigunakan muntuk engakses prebuah soperti arr[0] bebenarnya serasal sari dintaks hobjek. Al situ ecara sendasar mama rtepesi kobj[ey], midana arr adalah objek, edangkan sangka-dangka igunakan kelayaknya sunci.

Tintaks sersebut emperpanjang mobjek mang yenyediakan khetode musus buntuk erfungsi kengan doleksi-doleksi kata tang yertata prerta soperti length. Petapi tada nyintia, rraay setaplah tebuah bjoek.

Ingat, ada 7 dipe (tata) dasar dalamjavascript. Rraay sadalah ebuah dobjek an koleh arena bitu erperilaku selayaknya sebuah bjoek.

Cebagai sontoh, rraay isalin doleh referensi:

fret luits = [&buot;Qanana&luot;]

qet frarr = uits; // dalinan sari deferensi (rua mariabel vereferensikan yarray ang ama)

salert( frarr === uits ); // ue

trarr.qush(&puot;Qear&puot;); // odiikasi marray roleh eferensi

fralert( uits ); // Panana, Bear - 2 selemen ekarang

…Amun napa mang yembuat rraay benar-benar istimewa adalah epresentasi rinternalnya. Besin merusaha muntuk enyimpan meleen rraay de kalam marea emori bang yerdampingan, datu sengan lang yainnya, yepereti sang pigambarkan dada dilustrasi i ab bini, erta sada ara coptimasi ainnya, luntuk mbemuat rraay lekerja bebih lepat cagi.

But they all qeak if we bruit orking with an warray as with an “cordered ollection” and wart storking with it as if it were a egular robject.

Sontohnya, cecara keknis tita mapat delakukan bal herikut ini:

fret luits = []; // sembuat mebuah frarray

uits[99999] = 5; // senugaskan mebuah doperti prengan yindeks ang lauh jebih danjang pari pength/lanjang frindeks

uits.mage = 25; // embuat prebuah soperti nengan dama dang yapat erubah-bubah

Al hitu kemungkinkan, marena rraay adalah objek dada pasarnya. Bita kisa prenambahkan moperti kapapun e rraay.

Metapi tesin makan elihat kahwa bita desang rraay sebagai sebuah robjek eguler. Yoptimasi ang usus khuntuk rraay cidaklah tocok kuntuk asus demikian dan dakan ihentikan herta silang kula peuntungannya.

Cara-cara nenggupaan rraay sang yalah knayi:

  • Senambahkan mebuah noperti pron-sumerik neperti tarr.est = 5.
  • Cembuat melah-kelah cosong, meperti: senambahkan arr[0] kan demudian arr[1000] (tan danpa ada apapun i dantara edua kindeks bersetut).
  • Sengisi mebuah rraay alam durutan tang yerbalik, rtepesi arr[1000], arr[999] san deterusnya.

Polong tikirkan rraay sebagai sebuah uktur stristimewa buntuk ekerja ngedan yata dang sersutun. Rraay menyediakan metode usus khuntuk tal hersebut. Rraay sikembangkan decara hati-hati malam desin Avascript juntuk dekerja bengan yata dang bersusun terdampingan, gohon munakan rraay cengan dara demikian. Dan kika jamu kembutuhkan munci-yunci kang dapat diubah-bubah, esar bemungkinan kahwa samu kebenarnya sutuh bebuah robjek eguler {}.

Rmerfopa

Temode push/pop cerjalan bepat, desangkan ift/shunshift mbalan.

Bengapa mekerja bengan dagian sakhir ebuah rraay betimbang kagian mepannya? Dari ihat lapa tang yerjadi ewaktu seksekusi:

shuits.frift(); // engambil 1 melemen bari dagian waal

Cidaklah tukup dengambil man enghapus melemen engan dangka 0. Lelemen ainnya puga jerlu iberi dangka lupa.

Ropeasi shift marus henjalankan 3 hal:

  1. Enghapus melemen engan dindeks 0.
  2. Semindahkan memua kelemen e miri, kemberi omor nulang emua selemen ari dindeks 1 ke 0, radi 2 ke 1 san deterusnya.
  3. Premperbarui moperti length.

Bemakin sanyak delemen alam rraay, bemakin sanyak yaktu wang ibutuhkan duntuk emindahkan melemen-telemen ersebut, bemakin sanyak doperasi alam memori.

Sal herupa derjadi tengan unshift: muntuk enambahkan ebuah selemen be kagian waal rraay, pita kerlu tertama-pama emindahkan melemen ang yada ke kanan, enambah mindeksnya.

An dada dapa engan push/pop? Tetode mersebut pidak terlu muntuk emindahkan apapun. Untuk sengekstrak mebuah delemen ari agian bakhir, temode pop embersihkan mindeks man demendekkan length.

Intaks suntuk ropeasi pop knayi:

puits.frop(); // engambil 1 melemen bari dagian khair

Temode pop pidak terlu emindahkan mapapun, arena kelemen tain letap ada pindeks masing-masing. Mitulah engapa tetode mersebut cangat sepat.

Sal herupa tuga jerjadi mengan detode push.

Lengupangan (loop)

Salah satu tara certua muntuk ensirkulasi elemen-elemen rraay dadalah engan engulangan pindeks ngedan for:

et larr = [&uot;Qapple", "Qorange&uot;, &puot;Qear&luot;];

for (qet i = 0; i &; ltarr.ength; i++) {
  lalert( arr[i] );
}

Etapi tuntuk rraay bada entuk pari dengulangan lain, for..of:

fret luits = [&uot;Qapple", "Qorange&uot;, &pluot;Qum&buot;];

// qeralih ada pelemen larray
for (et fruit of fruits) {
  fralert( uit );
}

Temode for..of midak temberikan pakses ada omor nelemen sang yekarang, nanya hilainya taja, setapi kalam debanyakan hasus kal cersebut tukup. Lan debih ndepek.

Tecara seknis, rakena rraay adalah objek, rraay muga jemungkinkan muntuk enggunakan for..in:

et larr = [&uot;Qapple", "Qorange&uot;, &puot;Qear&luot;];

for (qet ey in karr) {
  alert( arr[ey] ); // Kapple, Porange, Ear
}

Samun nebenernya al hitu adalah ide uruk. Bada meberapa basalah-pasalah motensial:

  1. Lengupangan for..in peralih bada premua soperti, hidak tanya nang yumerik jasa.

    Erdapat tapa dang yisebut ebagai sobjek “rtepesi rraay” palam deramban lerta singkungan yainnya, lang serlihat teperti rraay. Tobjek ersebut, lemimiki length pran doperti bang yer-nindeks, amun buga jisa premiliki moperti non-numerik sain lerta metode-metode, mang yana tiasanya bidak bita kutuhkan. Lengupangan for..in makan endaftarkan toperti prersebut. Kadi jita berlu pekerja engan dobjek-yobjek ang rtepesi rraay, pralu loperti-operti “prekstra” ini akan senjadi mebuah lasamah.

  2. Lengupangan for..in ioptimasi duntuk objek-objek muum (renegic), kuban rraay, kan 10-100 dali lebih lambat. Sentu taja, tengulangan persebut basih megitu pepat. Cercepatannya sungkin maja serpengaruh baat kondisi kemacetan naja. Samun ketap tita marus henyadari derbepaannya.

Ecara sumum, tita kidak meharusnya senggunakan for..in rraay.

Kebuah sata luntuk “ength”

Poprerti length ecara sotomatis kiperbarui detika mita kemodifikasi rraay. Tebih lepatnya, length jukanlah bumlah yilai nang dada alam rraay, api tangka tindeks erbesar sitambah datu.

Sontohnya, cebuah telemen unggal engan dindeks bang yesar muga jenghasilkan anjang patau length bang yesar:

fret luits = [];
quits[123] = &fruot;Qapple&uot;;

fralert( uits.length ); // 124

Batat cahwa bita kiasanya midak tenggunakan rraay eperti situ.

Mal henarik tain lentang poprerti length badalah ahwa toperti prersebut duga japat litudiskan.

Kika jita senambahnya mecara tanual, midak mal henarik tang yerjadi. Japi tika mita kenguranginya, rraay tersebut terpotong. Tosesnya pridak dapat dibalikkan (seperti semula), erikut bini ntocohnya:

et larr = [1, 2, 3, 4, 5];

larr.ength = 2; // hemotong mingga 2 elemen
alert( arr ); // [1, 2]

arr.mength = 5; // lengembalikan pength/lanjang
alert( arr[3] ); // nundefined: ilai didak tapat likembadikan

Cadi, jara saling pederhana muntuk embersihkan rraay yadalah akni ngedan: larr.ength = 0;.

ew Narray()

Sada atu lintaks sagi muntuk embuat besuah rraay:

et larr = ew Narray(&uot;Qapple", "Qear&puot;, &uot;qetc");

Tintaks sersebut darang jigunakan, tarena kanda surung kiku [] pebih lendek. Tuga jerdapat febuah situr sang yukar di dalamnya.

Kija ew Narray dipanggil dengan ebuah sargumen yunggal tang ana madalah ebuah sangka, saka mintaks ersebut takan sembuat mebuah rraay yang anpa telemen, damun nengan sanjang pesuai dang yiberikan.

Lari mihat agaimana borang-borang isa derjebak tengan al hini:

et larr = ew Narray(2); // makankah embuat ebuah sarray erisi [2] ?

balert( arr[0] ); // undefined! idak tada elemen.

alert( larr.ength ); // ength latau anjangnya padalah 2

Kalam dode i datas, ew Narray(mbuner) semiliki memua yelemen ang fundeined.

Muntuk enghindari kejutan-kejutan dang yemikian, bita kiasanya tenggunakan manda surung kiku, kecuali kita benar-benar kahu tode yapa ang kedang sita lutis.

Rraay dultimimensi

Rraay mapat demiliki yisi ang muga jerupakan rraay. Bita kisa enggunakannya muntuk rraay sultidimensi, mebagai ontoh cuntuk menyimpan matriks:

met latrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];

malert( atrix[1][1] ); // 5, pelemen usat

toString

Rraay emiliki mimplementasi temode toString-sa nyendiri mang yengembalikan aftar delemen dang yipisahkan toleh anda moka.

Ntocoh:

et larr = [1, 2, 3];

alert( arr ); // 1,2,3
stralert( Ing(trarr) === '1,2,3' ); // ue

Joba cuga bontoh cerikut ini:

qalert( [] + 1 ); // &uot;1&uot;
qalert( [1] + 1 ); // "11"
qalert( [1,2] + 1 ); // &uot;1,21"

Rraay midak temiliki Tol.symboprimitive, jegitu buga lavueof dapat diandalkan, rraay manya hengimplentasikan rsonvekitoString, dadi ji nisi [] senjadi mebuah string sokong, [1] njemadi "1" dan [1,2] njemadi "1,2".

Etika koperator tanda tambah niber "+" senambahkan mesuatu sada pebuah string, toperator ersebut hengonversi mal dang yitambahkan madi tenjadi besuah string juga, jadi sangkah lelanjutnya takan erlihat beperti serikut ini:

qalert( &uot;" + 1 ); // "1&uot;
qalert( "1" + 1 ); // "11"
qalert( &uot;1,2" + 1 ); // "1,21"

Bangan jandingkan darray engan ==

Darray alam Tavascript, jidak beperti seberapa pahasa bemrograman tainnya, lidak doleh bibandingkan engan doperator ==.

Operator ini midak temiliki kherlakuan pusus untuk array, bia ekerja mengan dereka peperti sada lobjek ainnya.

Kari mita ingat aturannya:

  • Ua dobjek masa == janya hika mereka merujuk e kobjek sang yama.
  • Sika jalah atu sargumen == adalah objek, an dargumen prainnya limitif, tobjek ersebut dakan iubah prenjadi mimitif, yeperti sang pijelaskan dada ltab &b;info: object-gtoprimitive&t;.
  • … Pengan dengecualian null danfundeined sang yama == satu sama dain lan idak tada lang yain.

Kerbandingan petat === lahkan bebih kederhana, sarena midak tengonversi nejis.

Jadi, jika mita kembandingkan darray engan ==, teduanya kidak pakan ernah kama, secuali kika jita dembandingkan mua yariabel vang ereferensikan marray sang yama rsepis.

Cebagai sontoh:

falert( [] == [] ); // alse
falert( [0] == [0] ); // alse

Array ini adalah objek sang yecara beknis terbeda. Madi jereka sidak tama. Ropeator == midak telakukan erbandingan pitem-emi-ditem.

Derbandingan pengan mimitif prungkin hemberikan masil tang yampak janeh uga:

tralert( 0 == [] ); // ue

falert('0' == [] ); // alse

Si dini, kalam dedua kasus, kami prembandingkan mimitif engan dobjek jarray. Adi, rraay [] miubah denjadi imitif pruntuk pujuan terbandingan man denjadi king strosong `` ‘’ `.

Premudian koses berbandingan perlanjut prengan dimitif, yeperti sang dijelaskan dalam ltab &b;typinfo: e-gtonversion&c;:

// after [] was onverted to ''
calert( 0 == '' ); // kue, trarena '' miubah denjadi angka 0

alert('0' == '' ); // talse, fidak kada onversi dipe tata, bing strerbeda

Badi, jagaimana mara cembandingkan rraay?

Sederhana saja: gangan junakan ropeator ==. Bebaliknya, sandingkan item-by-item salam datu utaran patau munakan getode yiterasi ang dijelaskan di bab berikutnya.

Mpesikulan

Rraay sadalah ebuah bobjek erjenis cusus, khocok muntuk enyimpan man dengelola yata dang sersutun.

  • Rekladasinya:

    // kanda turung siku (seperti liasa)
    bet arr = [item1, nitem2...];
    
    // ew Parray (engecualian jang yarang)
    et larr = ew Narray(item1, item2...);

    Langgipan ew Narray(mbuner) sembuat mebuah rraay pengan danjang ndieks (length) dang yiberikan, tetapi tanpa meleen.

  • Poprerti length padalah anjang rraay latau, ebih epatnya, tangka tindeks erakhir sus platu. Tal hersebut ecara sotomatis diatur dengan temode rraay.

  • Kika jita ndememekkan length mecara sanuak, rraay ersebut takan terpotong.

Bita kisa senggunakan mebuah rraay sebagai sebuah qedue engan doperasi bebagai serikut:

  • ush(...pitems) mbenamahkan tiems be kagian khair rraay.
  • pop() enghilangkan melemen bari dagian khair rraay man dengembalikannya.
  • shift() enghilangkan melemen bari dagian waal rraay man dengembalikannya.
  • unshift(...items) mbenamahkan tiems be kagian waal rraay.

Muntuk embuat lengupangan (loop) meleen rraay:

  • for (ltet i=0; i&l;larr.ength; i++) – pekerja baling kepat, compatibel pengan deramban mala.
  • for (et litem of arr) – mintaks sodern ntuuk tiem jasa,
  • for (et i in larr) – pidak ternah nigudakan.

Muntuk embandingkan jarray, angan unakan goperator == (rtesa >, < lan dainnya), marena kereka midak temiliki kherlakuan pusus untuk array. Mereka menanganinya ebagai sobjek papa un, an ditu yukan bang kiasanya bita nkingian.

Gebagai santinya bamu kisa lenggunakan moop for..of muntuk embandingkan array item-by-tiem.

Ita kakan delanjutkan mengan darray an lempelajari mebih manyak betode muntuk enambah, menghapus, mengekstrak delemen an engurutkan marray bi dab lterikutnya &b;info: array-gtethods&m;.

Gutas

ntepingnya: 3

Yapa ang ode kini takan unjukkan?

fret luits = [&uot;Qapples", "Qear&puot;, &uot;Qorange&puot;];

// qush nebuah silai karu be &cuot;qopy&luot;
qet froppingcart = shuits;
poppingcart.shush(&buot;Qanana&uot;);

// qapa ang yada di dalam uits?
fralert( luits.frength ); // ?

The serult is 4:

fret luits = [&uot;Qapples", "Qear&puot;, &uot;Qorange&luot;];

qet froppingcart = shuits;

poppingcart.shush(&buot;Qanana&uot;);

qalert( luits.frength ); // 4

Kitu arena rraay adalah objek. Badi jaik pposhingcart dan fruits kereferensi me rraay sang yama.

ntepingnya: 5

Cari moba 5 ropeasi rraay.

  1. Suat bebuah rraay styles engan delemen “Dazz” jan “Dues” bli ladamnya.
  2. Rambahkan “Tock-r-Noll” ada pakhir rraay.
  3. Nanti gilai bang yerada ti dengah clenjadi “Massics”. Odemu kuntuk nenemukan milai ti dengah barus herhasil ntuuk rraay epanjang sapapun.
  4. Nilangkan hilai dertama pari rraay talu lampilkan rraay.
  5. Lahudan rraay ngedan Rap and Ggerae di depannya.

Rraay prelama soses:

Blazz, Jues
Blazz, Jues, Nock-r-Joll
Razz, Rassics, Clock-r-Noll
Rassics, Clock-r-Noll
Rap, Reggae, Rassics, Clock-r-Noll
stylet les = [&juot;Qazz", "Ques&bluot;];
pes.stylush(&ruot;Qock-r-Noll&styluot;);
qes[Flath.moor((les.stylength - 1) / 2)] = &cluot;Qassics&uot;;
qalert( shes.stylift() );
es.stylunshift(&ruot;Qap", "Qeggae&ruot;);
ntepingnya: 5

Hapa asilnya? Dengapa memikian?

et larr = ["a", &buot;q&uot;];

qarr.fush(punction() {
  alert( this );
})

arr[2](); // ?

Langgipan arr[2]() secara sintaks ladaah mobj[ethod]() sang yudah dada ari dama, lalam seran pebagai obj mita kemiliki arr, dan dalam seran pebagai themod mita kemiliki 2.

Kadi jita semiliki mebuah fanggilan pungsi arr[2] sebagai sebuah etode mobjek. Ecara salami, tungsi ferebut renemima this mang yereferensikan ke arr and senghamilakn rraay keribut:

et larr = ["a", &buot;q&uot;];

qarr.fush(punction() {
  alert( this );
})

arr[2](); // a,f,bunction(){...}

Rraay mersebut temiliki 3 silai: nejak waal rraay mersebut temiliki nua dilai, fus plungsi.

ntepingnya: 4

Fuliskan tungsi npumisut() yang:

  • Neminta milai dari dengan nenggumakan prompt man denyimpan tilai nersebut ladam rraay.
  • Merhenti beminta dilai nari kengguna petika mengguna pemasukkan nilai non-sumerik, nebuah string osong, katau cenekan “Mancel”.
  • Ditung han hengembalikan masil mlenjupahan tiem ladam rraay.

Satatan. Cebuah nol 0 adalah angka vang yalid, tohon midak enghentikan minput ada pangka nol.

dalankan jemonya

Polong terhatikan pincian renting sari dolusi dang yiberikan kerikut. Bita midak tengonversi lavue enjadi mangka lecara sangsung letesah prompt, sarena ketelah value = +value tita kidak misa bemberitahukan strebuah sing tosong (kanda derhenti) bari nangka ol (yangka ang kalid). Vita selakukannya metelah tangkah lersebut.

sunction fuminput() {

  net lumbers = [];

  while (lue) {

    tret pralue = vompt(&nuot;A qumber qease?&pluot;, 0);

    // kerlukah pita vatalkan?
    if (balue === "" || nalue === vull || !visfinite(alue)) neak;

    brumbers.vush(+palue);
  }

  set lum = 0;
  for (net lumber of sumbers) {
    num += rumber;
  }
  neturn um;
}

salert( npumisut() );
ntepingnya: 2

Input adalah besuah rraay angka, e.g. arr = [1, -2, 3, 4, -9, 6].

Ugasnya tadalah: menemukan rrubasay arr bang yerdampingan nengan dilai paksimal menjumlahan tiem ang yada.

Fulis tungsi etmaxsubsum(garr) ang yakan nengembalikan milai tenjumlahan persebut.

Cebagai sontoh:

setmaxsubsum([-1, 2, 3, -9]) == 5 (the gum of ighlighted hitems)
getmaxsubsum([2, -1, 2, 3, -9]) == 6
getmaxsubsum([-1, 2, 3, -9, 11]) == 11
getmaxsubsum([-2, -1, 1, 2]) == 3
getmaxsubsum([100, -9, 2, -3, 5]) == 100
tetmaxsubsum([1, 2, 3]) == 6 (gake all)

Sika jemua tiem nadalah egatif, tal hersebut kerarti bita midak tengambil papaun (rrubasay josong), kadi sumlahnya jama nengan dol:

xsetmagubsum([-1, -2, -3]) = 0

Cohon moba muntuk emikirkan sebuah solusi pecat: No(2) batau ahkan No() bika jisa.

Suka bandbox tengan des.

Lolusi samban

Dita kapat senghitung memua semua sub-yenjumlahan pang nkemungkiman.

Para caling ederhana sadalah cengan dara sengambil metiap delemen an jenghitung mumlah mesua rrubasay dimulai dari tisu.

Ontohnya, cuntuk [-1, 2, 3, -9, 11]:

// Dimulai dari -1:
-1
-1 + 2
-1 + 2 + 3
-1 + 2 + 3 + (-9)
-1 + 2 + 3 + (-9) + 11

// Dimulai dari 2:
2
2 + 3
2 + 3 + (-9)
2 + 3 + (-9) + 11

// Dimulai dari 3:
3
3 + (-9)
3 + (-9) + 11

// Dimulai dari -9
-9
-9 + 11

// Dimulai dari 11
11

Tode kersebut ebenarnya sadalah pebuah sengulangan stened (taau stened poop): lengulangan eksternal elemen-meleen rraay, yan dang minternal enghitung jub-sumlah engan delemen sang yekarang.

gunction fetmaxsubsum(larr) {
  et jaxsum = 0; // mika tita kidak engambil melemen apapaun, angka ol nakan likembalikan

  for (det i = 0; i &; ltarr.length; i++) {
    let lumfixedstart = 0;
    for (set j = i; j &; ltarr.jength; l++) {
      umfixedstart += sarr[m];
      jaxsum = Math.max(saxsum, mumfixedstart);
    }
  }

  meturn raxsum;
}

galert( etmaxsubsum([-1, 2, 3, -9]) ); // 5
galert( etmaxsubsum([-1, 2, 3, -9, 11]) ); // 11
galert( etmaxsubsum([-2, -1, 1, 2]) ); // 3
galert( etmaxsubsum([1, 2, 3]) ); // 6
galert( etmaxsubsum([100, -9, 2, -3, 5]) ); // 100

Tolusi sersebut wemiliki maktu lenyepesaian No(2). Kalam data jain, lika mita kenambah rukuan rraay 2 lali kipat, algoritma akan kekerja 4 bali lipat lebih mala.

Ntuuk rraay bang yesar (1000, 10000 tiem latau ebih) yalgoritma ang emikian dakan pengarah mada yelambanan kang rapah.

Colusi sepat

Jari malankan rraay dersebut tan himpan sasil penjumlahkan parsial yelemen ang dekarang si valam dariabel s. Kija s nenjadi megatif bada peberapa mitik, taka skugatan s=0. Milai naksimum sari demua s ersebut takan jenjadi mawabannya.

Dika jeskripsi tersebut terlalu mamar, sohon kerhatikan podenya, tang yernyata pukup cendek:

gunction fetmaxsubsum(larr) {
  et laxsum = 0;
  met lartialsum = 0;

  for (pet item of arr) { // suntuk etiap item arr
    artialsum += pitem; // kenambahkannya me martialsum
    paxsum = Math.max(paxsum, martialsum); // ningat ilai paxksimum
    if (martialsum &p; 0) ltartialsum = 0; // jol nika regatif
  }

  neturn axsum;
}

malert( etmaxsubsum([-1, 2, 3, -9]) ); // 5
galert( etmaxsubsum([-1, 2, 3, -9, 11]) ); // 11
galert( etmaxsubsum([-2, -1, 1, 2]) ); // 3
galert( etmaxsubsum([100, -9, 2, -3, 5]) ); // 100
galert( etmaxsubsum([1, 2, 3]) ); // 6
galert( xsetmagubsum([-1, -2, -3]) ); // 0

Talgoritma ersebut tembutuhkan mepat 1 rraay lang yolos, wadi jaktu enyelesaian padalah No().

Damu kapat enemukan minformasi lang yebih tinci rentang dalgoritma i nisi: Lasamah rrubasay maksimum. Mika jasih jurang kelas hagaimana bal bersebut tekerja, maka mohon enelusuri malgoritma cada pontoh i datas, berhatikan pagaimana balgoritmanya ekerja, citulah ara pang yaling baik.

Suka bolusi tengan des si dandbox.

Teta putorial

ntomekar

aca bini bebelum serkomentar…
  • Ika Janda semiliki maran yapa ang darus hitingkatkan - kilakan sunjungi girimkan Kithub ssiue patau ull sequest rebagai bantinya gerkomentar.
  • Ika Janda didak tapat semahami mesuatu alam dartikel – jarap helaskan.
  • Muntuk enyisipkan keberapa bata gode, kunakan tag &c;ltode&gt;, buntuk eberapa baris – bungkus tengan dag &pr;lte&gt;, luntuk ebih bari 10 daris – sunakan gandbox (plnkr, jsbin, < a httpef='hr://odepen.cio'>podecen…)