de-vraag
  • Klausimai
  • Žymos
  • Vartotojai
Pranešimai
Apdovanojimai
Registracija
Užsiregistravę gausite pranešimus apie atsakymus ir komentarus į savo klausimus.
Prisijungti
Jei jau turite paskyrą, prisijunkite ir patikrinkite naujus pranešimus.
Už pridėtus klausimus, atsakymus ir komentarus bus skiriami apdovanojimai.
Daugiau
Šaltinis
Redaguoti
 mjs
mjs
Question

Kaip "JavaScript" efektyviai suskaičiuoti objekto raktų / savybių skaičių?

Kaip greičiausiai suskaičiuoti objekto raktus / savybes? Ar galima tai padaryti neiteruojant objekto, t. y. nedarant

var count = 0;
for (k in myobj) if (myobj.hasOwnProperty(k)) count++;

("Firefox" turėjo stebuklingą savybę __count__, bet ji buvo pašalinta maždaug 4 versijoje.)

1444 2008-09-24T08:56:21+00:00 3
 Luc125
Luc125
Redaguotas klausimas popietr gegužė 2013 в 7:24
Programavimas
javascript
performance
properties
count
key
Šis klausimas turi 1 atsakymas atsakymų anglų kalba, norėdami juos perskaityti prisijunkite prie savo paskyros.
 Confusion
Confusion
priešpietr rugsėjis 2008 в 9:11
2008-09-24T09:11:22+00:00
Daugiau
Šaltinis
Redaguoti
#8503032

Jei iš tikrųjų susiduriate su našumo problema, siūlyčiau skambučius, kuriais į objektą ir iš objekto pridedamos ir (arba) iš jo pašalinamos savybės, papildyti funkcija, kuri taip pat didina ir (arba) mažina atitinkamai pavadintą (dydžio?) savybę.

Pradinį savybių skaičių reikia apskaičiuoti tik vieną kartą, o toliau - tik vieną kartą. Jei iš tikrųjų nėra našumo problemos, nesivarginkite. Tiesiog įtraukite šią kodo dalį į funkciją getNumberOfProperties(object) ir viskas.

 hitautodestruct
hitautodestruct
Redaguotas atsakymas popietr vasaris 2013 в 6:42
26
0
Luke Bennett
Luke Bennett
priešpietr rugsėjis 2008 в 9:13
2008-09-24T09:13:13+00:00
Daugiau
Šaltinis
Redaguoti
#8503034

Nežinau jokio būdo, kaip tai padaryti, tačiau, kad iteracijų būtų kuo mažiau, galite pabandyti patikrinti, ar egzistuoja __count__, ir jei jo nėra (t. y. ne "Firefox"), tada galite iteruoti per objektą ir apibrėžti jį vėlesniam naudojimui, pvz:

if (myobj.__count__ === undefined) {
  myobj.__count__ = ...
}

Tokiu būdu bet kuri naršyklė, palaikanti `count``, jį naudotų, o iteracijos būtų atliekamos tik tose naršyklėse, kurios jo neturi. Jei skaičius keičiasi ir jūs negalite to padaryti, visada galite jį paversti funkcija:

if (myobj.__count__ === undefined) {
  myobj.__count__ = function() { return ... }
  myobj.__count__.toString = function() { return this(); }
}

Tokiu būdu bet kada, kai pateiksite nuorodą į myobj.`count``, funkcija bus paleista ir perskaičiuota.

Luke Bennett
Luke Bennett
Redaguotas atsakymas priešpietr rugsėjis 2008 в 9:36
15
0
 amix
amix
priešpietr rugsėjis 2008 в 9:05
2008-09-24T09:05:38+00:00
Daugiau
Šaltinis
Redaguoti
#8503031

Nemanau, kad tai įmanoma (bent jau nenaudojant kai kurių vidinių įtaisų). Ir nemanau, kad daug laimėtumėte tai optimizavę.

0
0
Pridėti klausimą
Kategorijos
Visi
Technologijos
Kultūra / poilsis
Gyvenimas / Menai
Mokslas
Profesionalus
Verslas
Vartotojai
Visi
Naujas
Populiarus
1
Roxana Elizabeth CASTILLO Avalos
Registruota prieš 4 dienas
2
Hideo Nakagawa
Registruota prieš 5 dienas
3
Sergiy Tytarenko
Registruota prieš 6 dienas
4
shoxrux azadov
Registruota prieš 1 savaitę
5
Koreets Koreytsev
Registruota prieš 1 savaitę
DE
EL
ES
FR
ID
IT
JA
KO
LT
NL
PT
RU
TR
ZH
© de-vraag 2022
Šaltinis
stackoverflow.com
pagal licenciją cc by-sa 3.0 nurodant autorystę