Подтвердить что ты не робот

Как получить ключи массива с помощью jQuery?

Добрый день. У меня есть массив с некоторыми ключами и значениями в них. Затем мне нужно получить ключи массива, а не данные в них. Я хочу сделать это с помощью 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 или любой другой более эффективный способ получить это?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

console.log( Object.keys( {'a':1,'b':2} ) );

Ответ 4

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

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

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

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

EDIT:

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

Ответ 5

Не переустанавливайте колесо, используйте Underscore

Я знаю, что OP специально упоминал jQuery, но я хотел бы дать здесь ответ, чтобы познакомить людей с полезной Underscore, если они уже не знают об этом.

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

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

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

Ответ 6

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

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 на объекте таким образом. Возможно, вы предполагаете сначала поставить прототип, но это, по-видимому, вызывает конфликт с GreenSock и т.д.