Я думаю, что предыдущий зеленый ответ был плохим, почему вы можете спросить?
О, и, кстати, сериализация также плоха, вам, возможно, придется добавить Serializable повсюду (это также заставляет меня плакать ).
Итак, каково решение:
Библиотека глубокого клонирования Java Библиотека клонирования - это небольшая библиотека Java с открытым исходным кодом (apache license), которая глубокие клоны. Объектам не нужно реализовывать интерфейс Cloneable. Эффективно, эта библиотека может клонировать ЛЮБЫЕ java-объекты. Его можно использовать, то есть в реализациях кеша, если вы не хотите, чтобы кешированный объект был изменен или когда вы хотите создать глубокую копию объектов.
Cloner cloner=new Cloner();
XX clone = cloner.deepClone(someObjectOfTypeXX);
Проверьте это на https://github.com/kostaskougios/cloning
вы можете использовать функцию 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"]
Я знаю, что OP специально упомянул jQuery, но я хотел поставить здесь ответ, чтобы познакомить людей с полезными Подчеркните библиотеку, если они уже не знают об этом.
Используя метод keys
в библиотеке Underscore , вы можете просто сделать следующее:
_.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 и т. Д.
Используйте объект (пары ключ / значение, ближайший JavaScript для ассоциативного массива) для этого, а не для объекта массива. Кроме этого, я считаю, что это самый элегантный способ
var foo = {};
foo['alfa'] = "first item";
foo['beta'] = "second item";
for (var key in foo) {
console.log(key);
}
Примечание: JavaScript не гарантирует какого-либо конкретного порядка для свойств. Таким образом, вы не можете ожидать, что свойство, которое сначала было определено первым, оно может наступить последним.
EDIT:
В ответ на ваш комментарий, я считаю, что эта статья наилучшим образом суммируются случаи, почему массивы в JavaScript не должны использоваться таким образом -