Есть много ответов, но ни один из них не дал желаемого эффекта, который мне был нужен. Я хотел использовать всю мощь глубокой копии jQuery ... Однако, когда он сталкивается с массивом, он просто копирует ссылку на массив и глубоко копирует элементы в нем. Чтобы обойти это, я сделал небольшую рекурсивную функцию, которая автоматически создаст новый массив.
(Он даже проверяет kendo.data.ObservableArray, если вы этого хотите! Хотя убедитесь, что вы вызываете kendo.observable (newItem), если хотите, чтобы массивы снова стали наблюдаемыми.)
Итак, чтобы полностью скопировать существующий элемент, вы просто делаете это:
var newItem = jQuery.extend(true, {}, oldItem);
createNewArrays(newItem);
function createNewArrays(obj) {
for (var prop in obj) {
if ((kendo != null && obj[prop] instanceof kendo.data.ObservableArray) || obj[prop] instanceof Array) {
var copy = [];
$.each(obj[prop], function (i, item) {
var newChild = $.extend(true, {}, item);
createNewArrays(newChild);
copy.push(newChild);
});
obj[prop] = copy;
}
}
}