在.splice()之后重置角度函数中数组的副本

resetting a copy of an array in an angular function after .splice()

本文关键字:函数 数组 副本 splice 之后      更新时间:2023-09-26

我想做的是制作一个有角度的下拉菜单,从列表中删除当前页面。加载下一个视图时,我希望菜单重置并删除当前视图。

组成下拉菜单的对象数组

var menuItems = [
    {menuItem: 'home', url: '/'},
    {menuItem: 'depth', url: '/depth'},
    {menuItem: 'bolt circle', url: '/bolt_circle'}
];

对数组进行排序()并从数组中取出当前页面的角度函数。

       $scope.sort = function(){
           $scope.items = menuItems;
           for(i=$scope.items.length-1; i>=0; i--){
               var obj = $scope.items[i];
           if($location.path() === obj.url){
               $scope.items.splice(i, 1);
            }
        }

我对angular和javascript还很陌生,所以我不知道为什么menuItems看起来像是.spicce()和$scope.items,每次我转到一个页面时,它都会从菜单中删除,直到我没有链接为止。我本以为每次运行sort()函数时制作一个数组副本会给我一个数组的新副本。我希望我解释得足够好。

执行此操作时:

$scope.items = menuItems;

您不是复制menuItems数组,而是在$scope对象中创建一个新属性items,该属性将具有与menuItems相同的数组引用。这意味着$scope.itemsmenuItems是相同的。

为了创建menuItems阵列的副本,您应该执行以下操作:

$scope.items = menuItems.slice(0);