【问题标题】:Angularjs Load object into array via forEachAngularjs通过forEach将对象加载到数组中
【发布时间】:2017-03-14 02:54:36
【问题描述】:

我有一系列药品代码'BARB', 'HALU', 'METH'。我想循环遍历这些代码并为每个代码创建一个新对象。

var saveObj = {};
saveObj.SelectedList = [];
angular.forEach(self.DrugNamesSelected, function(value, key) {
    //Load Objects into array
    var newObj = {};
    newObj = self.Selected;
    newObj.FK_CLNT_PERSFK_PER = $routeParams.personId;
    newObj.DRUG_TYP_CODE = value;
    saveObj.SelectedList.push(newObj);
});

这就是我得到的

saveObj.SelectedList[0].DRUG_TYP_CODE = 'METH' saveObj.SelectedList[1].DRUG_TYP_CODE = 'METH' saveObj.SelectedList[2].DRUG_TYP_CODE = 'METH'

这是我需要的

saveObj.SelectedList[0].DRUG_TYP_CODE = 'BARB' saveObj.SelectedList[1].DRUG_TYP_CODE = 'HALU' saveObj.SelectedList[2].DRUG_TYP_CODE = 'METH'

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    好像newObj = self.Selected; 给你带来了麻烦。所以发生的事情是每个元素都存储self.Selected的引用(即所有对象都引用单个内存引用)。因此,随着最后一个值更新为 METH,所有 3 个元素都具有相同的 self.Selected 值。

    angular.forEach(self.DrugNamesSelected, function(value, key) {
        //Load Objects into array
        var newObj = {};
        //newObj = self.Selected; //removed this line
        newObj.FK_CLNT_PERSFK_PER = $routeParams.personId;
        newObj.DRUG_TYP_CODE = value;
        saveObj.SelectedList.push(newObj);
    });
    

    如果您出于某种原因需要该特定对象分配,我建议您使用Object.assign,它将self.Selected 属性复制到newObj

    Object.assign(newObj, self.Selected)
    

    IE11 不支持开箱即用的Object.assign。您可以考虑从 here 中添加 polyfill

    【讨论】:

    猜你喜欢
    • 2020-04-09
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多