Как получить ключи массива с помощью jQuery? - PullRequest
34 голосов
/ 10 августа 2009

Добрый день. У меня есть массив с некоторыми ключами и значениями в них. Затем мне нужно получить ключи массива, а не данные в них. Я хочу сделать это с помощью jQuery. Например, я знаю, что в PHP есть функция array_keys (); который принимает массив в качестве параметра и возвращает массив с каждым ключом в каждом индексе.

Это то, что я придумал, и это работает ... единственная проблема в том, что это кажется таким неэффективным;

var foo = [];
foo['alfa'] = "first item";
foo['beta'] = "second item";

for (var key in foo) {
    console.log(key);
}

Это выдаст;

alfa
beta

Но есть ли предопределенная функция для этого, как в PHP или любом другом более эффективном способе получить это?

Ответы [ 6 ]

61 голосов
/ 10 августа 2009

Вы можете использовать функцию each:

var a = {};
a['alfa'] = 0;
a['beta'] = 1;
$.each(a, function(key, value) {
      alert(key)
});

у него есть несколько приятных ярлыков / трюков: проверьте подробности здесь

50 голосов
/ 20 марта 2013

Используя jQuery, проще всего получить массив ключей от объекта:

$.map(obj, function(element,index) {return index})

В вашем случае он вернет этот массив: ["alfa", "beta"]

28 голосов
/ 28 марта 2012
console.log( Object.keys( {'a':1,'b':2} ) );
6 голосов
/ 10 августа 2009

Используйте для этого объект (пары ключ / значение, ближайший JavaScript должен иметь ассоциативный массив), а не объект массива. Кроме этого, я считаю, что это самый элегантный способ

var foo = {};
foo['alfa'] = "first item";
foo['beta'] = "second item";

for (var key in foo) {
        console.log(key);
}

Примечание: JavaScript не гарантирует какой-либо определенный порядок для свойств. Таким образом, вы не можете ожидать, что свойство, которое было определено первым, появится первым, оно может прийти последним.

EDIT:

В ответ на ваш комментарий я считаю, что эта статья лучше всего описывает случаи, почему массивы в JavaScript не следует использовать таким образом -

5 голосов
/ 25 сентября 2014

Не изобретай колесо, используй Подчеркни

Я знаю, что ОП особо упомянул jQuery , но я хотел бы поставить здесь ответ, чтобы познакомить людей с полезной библиотекой Подчеркнуть , если они об этом еще не знают.

Используя метод keys в библиотеке Underscore , вы можете просто сделать следующее:

_.keys(foo)  #=> ["alfa", "beta"]

Кроме того, есть множество других полезных функций, которые стоит изучить.

0 голосов
/ 02 мая 2014

Я использую что-то вроде этой функции, которую я создал ...

Object.getKeys = function(obj, add) {
    if(obj === undefined || obj === null) {
        return undefined;
    }
    var keys = [];
    if(add !== undefined) {
        keys = jQuery.merge(keys, add);
    }
    for(key in obj) {
        if(obj.hasOwnProperty(key)) {
                keys.push(key);
        }
    }
    return keys;
};

Я думаю, вы могли бы установить obj для себя или что-то лучше в первом тесте. Иногда кажется, что я тоже проверяю, пусто ли это, поэтому я так и сделал. Также я не думаю, что {} - это Object. * Или, по крайней мере, есть проблема с поиском функции getKeys для Object таким образом. Может быть, вы предполагаете сначала поставить прототип, но это может вызвать конфликт с GreenSock и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...