Ответ 1
вы можете использовать функцию each
:
var a = {};
a['alfa'] = 0;
a['beta'] = 1;
$.each(a, function(key, value) {
alert(key)
});
у него есть несколько хороших ярлыков/трюков: проверьте подробности gory здесь
Добрый день. У меня есть массив с некоторыми ключами и значениями в них. Затем мне нужно получить ключи массива, а не данные в них. Я хочу сделать это с помощью 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 или любой другой более эффективный способ получить это?
вы можете использовать функцию each
:
var a = {};
a['alfa'] = 0;
a['beta'] = 1;
$.each(a, function(key, value) {
alert(key)
});
у него есть несколько хороших ярлыков/трюков: проверьте подробности gory здесь
Используя jQuery, самый простой способ получить массив ключей из объекта:
$.map(obj, function(element,index) {return index})
В вашем случае он вернет этот массив: ["alfa", "beta"]
console.log( Object.keys( {'a':1,'b':2} ) );
Используйте объект (пары ключ/значение, ближайший JavaScript для ассоциативного массива) для этого, а не для объекта массива. Помимо этого, я считаю, что это самый элегантный способ
var foo = {};
foo['alfa'] = "first item";
foo['beta'] = "second item";
for (var key in foo) {
console.log(key);
}
Примечание. JavaScript не гарантирует какой-либо конкретный порядок для свойств. Поэтому вы не можете ожидать, что сначала будет показано свойство, которое было определено первым, оно может наступить последним.
EDIT:
В ответ на ваш комментарий, я считаю, что эта статья лучше всего обобщает случаи, почему массивы в JavaScript не должны использоваться таким образом -
Я знаю, что OP специально упоминал jQuery, но я хотел бы дать здесь ответ, чтобы познакомить людей с полезной Underscore, если они уже не знают об этом.
Используя метод keys
в библиотеке поддеревьев, вы можете просто сделать следующее:
_.keys(foo) #=> ["alfa", "beta"]
Кроме того, существует множество других полезных функций, которые заслуживают внимания.
Я использую что-то вроде этой функции, которую я создал...
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 и т.д.