Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript如何正确克隆和不修改对象_Javascript_Javascript Objects_Lodash - Fatal编程技术网

Javascript如何正确克隆和不修改对象

Javascript如何正确克隆和不修改对象,javascript,javascript-objects,lodash,Javascript,Javascript Objects,Lodash,我有一个对象,我搜索键并在找到键匹配时修改值: var myData = // some http.get which returns a JSON object. 假设myData是: myData : { "suffix" : "mr", "fname" : "jullian", "lname" : "exor", "dobGmt" : 145754294700000 "addressLine1" : "xxx", "street" : "x

我有一个对象,我搜索键并在找到键匹配时修改值:

var myData = // some http.get which returns a JSON object.
假设myData是:

myData : {
    "suffix" : "mr",
    "fname" : "jullian",
    "lname" : "exor",
    "dobGmt" : 145754294700000
    "addressLine1" : "xxx",
    "street" : "xxx",
    "rentStartedGmt" : 145754294700000,
    "deposit" : "50.00",
    "occupation" : "math teacher",
    "profession" : {
         "careerStartedGmt": 1458755224800000,
         "careerEndGmt": 1459854224800000,
     }
}

$scope.viewData = function() {
    var objClone = _.clone(myData);
    objClone = myFactory.ProcessData(objClone);
    $scope.view = objClone;
};

$scope.viewProducts = function() {

};
我的工厂:

myModule.factory('myFactory', function() {
    return {
        ProcessData: function(data) {
            var tmp = data;

            function findGmt(tmp) {
                for (var key in tmp) {
                    var v = tmp[key];
                        if (key.indexOf("Gmt") !== -1) {
                            tmp[key] = tmp[key].format('DD-MM-YY HH:mm');    
                        }    
                    }
                }

            findGmt(tmp);

            return tmp;
        }
    }
});
用户可以单击
viewData
按钮,该按钮调用
$scope.viewData
,在同一页面上以模式显示格式化的JSON。 然后用户单击
viewProducts
,调用
$scope.viewProducts
,在同一页面上以模式显示产品列表

但是,在单击
viewProducts
之后,如果我再次返回单击
viewData
,在调试时,我可以看到var
objClone
已经格式化,而不是使用一个新的克隆u.clone(myData)


缺少如何克隆/不修改原始对象?

您必须使用
var copiedObj=angular.copy(myObj)
。它将创建myObj的副本,但更改myObj不会更改copiedObj中的任何内容。

通常(现在可以被标准替换)仅将提供的对象属性复制到新对象中。它们不会递归地克隆对象的值。例如,这意味着您的
profession
属性的内容对于克隆对象和原始对象是相同的:
myData.profession===objClone.profession
为true


您正在寻找的是一个函数。

@evolutionxbox duplicate在上下文中,当op要求使用完全不同的语言时,这没有帮助。@Val-my bad-removedI个人将尝试此链接(即
.extend
,但不确定引用是否丢失或没有如您所要求的那样)