Dlaczego więc wynik wynosi 0 i jak znaleźć rzeczywisty rozmiar?Jak znaleźć długość literalnej tablicy?
var array = [];
array["foo"] = "bar";
array["bar"] = "foo";
document.write(array.length);
Dlaczego więc wynik wynosi 0 i jak znaleźć rzeczywisty rozmiar?Jak znaleźć długość literalnej tablicy?
var array = [];
array["foo"] = "bar";
array["bar"] = "foo";
document.write(array.length);
Ponieważ jest to obiekt, który składa się z właściwościami i przyjąć postać par klucz/wartość (koncepcyjnie podobny do tablicy asocjacyjnej, lub stolik hash) trzeba będzie zrobić coś takiego:
Object.size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
var array = [];
array["foo"] = "bar";
array["bar"] = "foo";
var size = Object.size(array);
zasadzie kiedy robisz
array["foo"] = "bar"
to tylko dodaje trochę więcej atrybutów do tablicy, która jest obiektem. W javascript, array.foo i array ['foo'] oznaczają to samo.
Dzięki za wyjaśnienie, że na zewnątrz. Ale nie odpowiada na pytanie? – Mantar
Nie przekształca go w obiekt. Tablice * to * obiekty, więc możesz ustawić na nich dowolne właściwości. – lonesomeday
Może jestem naiwny jest (moja JavaScript nie jest, co to może być), ale nie powinno to być coś takiego:
var array = [];
array[0] = "bar";
array[1] = "foo";
document.write(array.length);
Rzeczywisty rozmiar wynosi 0, ponieważ nie umieścić dowolny elementy do obiektu tablicowego - można to zrobić tylko za pomocą metody (push itp.) lub poprzez przypisanie wartości do indeksowanej właściwości (lub w konstruktorze).
Jak powiedziałeś, nie zajmujesz się tablicą, ale obiektem. Instrukcje dotyczące sposobu liczenia właściwości obiektu (w samym pytaniu) znajdują się w artykule How to efficiently count the number of keys/properties of an object in JavaScript?.
ustawiasz właściwość na tablicy, nie nadając mu nowy element. Tablice mogą odbierać dowolne właściwości, tak jak każdy inny obiekt JavaScript. Na przykład:
var foo = [];
foo.bar = 'foobar';
console.log(foo.bar); // outputs 'foobar'
console.log(foo); // outputs [] -- empty array
Aby dodać elementy do tablicy, należy Array.push
:
var foo = [];
foo.push('foobar');
console.log(foo); // outputs ['foobar']
Jeśli chcesz pary klucz => wartość, należy użyć obiektu w zamian:
var foo = {};
foo['bar'] = 'foobar';
console.log(foo); // outputs {bar: 'foobar'}
First off , długość wynosi 0, ponieważ liczba pozycji w array
wynosi 0.
Kiedy robisz składnia ta tworzy właściwość o nazwie foo
o wartości bar
. Długość jest nadal 0, ponieważ nie dodałeś niczego do tablicy, właśnie wyznaczają nowe właściwości na tablicy
wersja robocza tutaj: http://jsfiddle.net/VyjJD/3/
var array = [];
array["foo"] = "bar";
array["bar"] = "foo";
array.bin = function() { return "bin"; };
array[0] = "bar";
array[1] = "foo";
array[2] = "bin";
array[3] = "bat";
var props = 0;
for (key in array)
props++;
document.write(array.length + "<br />"
+ props + "<br />"
+ (array.foo == array["foo"]) + "<br />"
+ array.bar + "<br />"
+ array.bin());
Uwaga, array.length = 4
ale props = 7
który jest wszystkim właściwości i liczbę elementów w tablicy.
+100. Świetne wyjaśnienie. Dziękuję Ci. – Radek
Object.keys (tablica) .length
zobaczyć: https://stackoverflow.com/a/13802999/1488217
kredyty idzie do ian
Lub też: Object.prototype.size = function() ... A następnie możesz użyć go jak: var size = array.size() –
... lub jako zwykły-stary funkcji, i po prostu wykonaj ' getSize (var); ' – karim79
Nie ma czegoś takiego jak tablica asocjacyjna w JS. Jest to obiekt i tylko alternatywna składnia, aby uzyskać dostęp do jego właściwości. Zamiast 'array [" foo "]' możesz równie dobrze napisać 'tablica.foo'. Dlatego właściwość długości nie działa. Ustawia właściwości obiektu tablicy i nie dodaje elementów do tablicy. – DanMan