Znam w javascript Objects podwójnie jako skróty, ale nie byłem w stanie znaleźć wbudowanej funkcji, aby uzyskać klucze
var h = {a:'b',c:'d'};
Chcę coś takiego
var k = h.keys() ; // k = ['a','c'];
Łatwo jest napisać funkcję, aby iterować elementy i dodać klucze do tablicy, którą zwracam, ale czy istnieje standardowy, czystszy sposób, aby to zrobić?
Wciąż czuję, że musi to być prosta wbudowana funkcja, za którą tęskniłem, ale nie mogę jej znaleźć!
javascript
object
key
Poklepać
źródło
źródło
Odpowiedzi:
We współczesnym JavaScript (ECMAScript 5) istnieje funkcja nazywana
Object.keys
wykonywaniem tej operacji:Szczegóły kompatybilności można znaleźć tutaj .
Na stronie Mozilli znajduje się także fragment dla kompatybilności wstecznej:
źródło
if(!Object.prototype.keys) Object.prototype.keys = function() { if (this !== Object(this)) throw new TypeError('Object.keys called on non-object'); var ret = [], p; for (p in this) if (Object.prototype.hasOwnProperty.call(this, p)) ret.push(p); return ret; } var x = { a: { A: 1, B: 2, C: 3 }, b: { A: 10, B: 20 } }; alert(x.a.keys());
Object.prototype.keys
,keys
udostępni to wszystkim podklasom Object, a zatem wszystkim obiektom. Które prawdopodobnie chcesz, jeśli próbujesz użyć OOP. W każdym razie tak naprawdę zależy to od twoich wymagań.W przypadku kodu produkcyjnego wymagającego dużej kompatybilności z przeglądarkami klienckimi nadal sugeruję powyższą odpowiedź Iwana Nevostrueva, aby upewnić się
Object.keys
w starszych przeglądarkach. Możliwe jest jednak uzyskanie dokładnej żądanej funkcjonalności za pomocą nowej wersji ECMAdefineProperty
funkcji .Od ECMAScript 5 - Object.defineProperty
Od ECMA5 można używać
Object.defineProperty()
do definiowania właściwości niepoliczalnych . Prąd kompatybilność nadal ma wiele do życzenia, ale to powinno ostatecznie stać się użyteczna we wszystkich przeglądarkach. (Zwłaszcza zwróć uwagę na obecną niezgodność z IE8!)Ponieważ jednak dodano już ECMA5
Object.keys
, równie dobrze możesz użyć:Oryginalna odpowiedź
Edytować: Ponieważ ta odpowiedź już istnieje, pozostawię powyższe nietknięte. Każdy, kto to czyta, powinien również przeczytać poniżej odpowiedź Iwana Nevostrueva.
Nie ma sposobu, aby funkcje prototypowe były niepoliczalne, co powoduje, że zawsze pojawiają się w pętlach wejściowych, które nie są używane
hasOwnProperty
. Nadal uważam, że ta odpowiedź byłaby idealna, gdyby rozbudowa prototypu Object nie była taka niechlujna.źródło
możesz użyć
Object.keys
źródło
Możesz użyć Underscore.js , który jest biblioteką narzędzi JavaScript.
źródło
Object.prototype
_.keys(obj).length
aby sprawdzić, czy są jakieś klucze.O ile wiem, to najlepsze, co możesz zrobić ...
źródło
Za pomocą jQuery możesz uzyskać następujące klucze:
Lub:
dzięki @pimlottc
źródło
JQuery.map
:$.map(h, function(v,k) { return k; });
Wierzę, że możesz przeglądać właściwości obiektu za pomocą for / in, więc możesz zrobić coś takiego:
źródło
Chciałem użyć wyżej ocenianej odpowiedzi
Jednak w przypadku korzystania w połączeniu z Google Maps API v3 mapy google nie działają.
działa dobrze.
źródło
jeśli próbujesz uzyskać tylko elementy, ale nie funkcje, ten kod może ci pomóc
}
jest to część mojej implementacji HashMap i chcę tylko kluczy,
this
to obiekt hashmap, który zawiera kluczeźródło