我想在不更改原始數組的情況下過濾數組。你可以看到我在filterChange函數中做的第一件事是從原始數組拼接。原始數組仍然最終改變,我不明白爲什麼。保持原始數組的同時保持原始數組的Javascript過濾器深陣列
var MenuDisplayModule = (function ($, window, document, Handlebars) {
var module = {};
module.menuItems = [];
module.init = function() {
console.info('BreadcrumbDisplayModule Init');
};
module.template = function (array) {
module.menuItems = array;
var filteredMenuItems = array.slice(0);
_template(filteredMenuItems);
}
module.filterChange = function (filterText) {
var filteredMenuItems = module.menuItems.slice(0);
filteredMenuItems.forEach(function (item, index) {
var filteredItems = item.MenuItems.filter(function (el) {
return (el.MenuText.includes(filterText));
});
filteredMenuItems[index].MenuItems = filteredItems;
})
_template(filteredMenuItems);
}
function _template(filteredMenuItems) {
var menu_items_source = $("#menu-items-template").html();
var menu_items_template = Handlebars.compile(menu_items_source);
$("#menu-items-placeholder").empty().html(menu_items_template({ menuItems: filteredMenuItems }));
}
return module;
}(window.jQuery, window, document, window.Handlebars));
您能否提供一些代碼,說明您在何處/如何使用此模塊進行測試? –
沒有關於數組實際內容的更多信息,對象的結構很難做出決定性的結論,但「slice」只執行淺拷貝,因此數組內的對象將成爲任何副本中的相同對象該陣列。例如,如果你在這些數組中嵌入了DOM元素,你將永遠不會擁有這些元素的副本。如果他們被放置在你的文檔中,他們將實際移動*而不是重複。在這些DOM元素上使用'clone'方法。 – trincot