使用$ filter后如何避免更新原始数组?

时间:2016-02-11 15:20:48

标签: javascript angularjs

请参阅以下代码:

var fieldsControls = $filter('filter')(vm.FieldsControls, { FieldId: id });

            for (var i = 0; i < fieldsControls.length; i++)
            {
                if (fieldsControls[i].ControlType == "DropDown") {
                    fieldsControls[i].Options = $filter('filter')(vm.Options, { type: fieldsControls[i].type });
                }
            }
            return fieldsControls;

返回之后(甚至在for循环之后),我发现原始数组“vm.FieldsControls”正在使用新的Options值进行更新。但是,这不应该只改变新的数组fieldControls吗?

1 个答案:

答案 0 :(得分:2)

首先准备好数组的深层副本。这是代码:

     var copy = angular.copy(vm.FieldsControls);

     var fieldsControls = $filter('filter')(copy, { FieldId: id });

        for (var i = 0; i < fieldsControls.length; i++)
        {
            if (fieldsControls[i].ControlType == "DropDown") {
                fieldsControls[i].Options = $filter('filter')(vm.Options, { type: fieldsControls[i].type });
            }
        }
        return fieldsControls;