Javascript 来自SerServer的angularjs响应传递所有if语句

Javascript 来自SerServer的angularjs响应传递所有if语句,javascript,angularjs,Javascript,Angularjs,我正在AngularJs和Spring中开发一些应用程序,我遇到了一个问题 来自后端的响应: ["PPT", "PPU"] 以及角度控制器中的功能: function setCompanyCodes (companyCodes) { var tmpArray = []; var tmpObject = { value: "", name: "" }; _.each(companyCodes, function (v

我正在AngularJs和Spring中开发一些应用程序,我遇到了一个问题

来自后端的响应:

["PPT", "PPU"]
以及角度控制器中的功能:

function setCompanyCodes (companyCodes) {
    var tmpArray = [];
    var tmpObject = {
            value: "",
            name: ""
    };
    _.each(companyCodes, function (val) {
            tmpObject.value = val;
            if (val === "PPT") {
                tmpObject.name = "Post Patron Team";
            } else if (val === "PPU") {
                tmpObject.name = "Post Patron University";
            }
            tmpArray.push(tmpObject);
        }
    );
    $scope.companyCode = tmpArray;
}

问题是val传递了两个if语句,因此它以两个相同的公司名称结尾。我尝试了双等号-相同的结果。

您经常使用和推送相同的对象,但您必须记住数组/对象是通过引用传递的,而不是通过值传递的,例如字符串

例如:

var objArr = [];
var obj = {value: "",name: ""};
obj.value = "PPT";
obj.name = "Post Patron Team";
objArr.push(obj); //objArr: [{value: "PPT", name:"Post Patron Team"}]
obj.value = "PPU"; //objArr: [{value: "PPU", name:"Post Patron Team"}]
你怎么解决这个问题

您可以推送obj的副本,这会打断对原始对象的引用

tmpArray.push(angular.copy(tmpObject));

您能显示console.logval的输出是什么吗?也许您必须将从后端接收到的数组解码回JSON来处理它。似乎数组中的元素与这两个值都匹配。检查您的companyCodes数组中有什么。控制台的输出,logval-PPT,在第二次运行PPU时,您是否可以尝试使用==而不是==?@SadokMtir companyCodes是后端错误的响应数组,它们的解决方案只会帮助加强您的知识。