AngularJS/JavaScript-值应用于数组中的所有JSON

AngularJS/JavaScript-值应用于数组中的所有JSON,javascript,angularjs,Javascript,Angularjs,故事: 我创建了一个数组$scope.mainArray,它将使用ng repeat以如下方式显示: 每个对象内部都有一个数组,该数组在使用ng repeat时显示,如下所示: 每个都是一个布尔变量。如果为true,则的背景色将变为绿色。否则,默认背景 问题: 每当我将1布尔值变为true时,该列中的所有都将变为绿色。代码$scope.mainArray[0]。子数组[0]。isGreen=true;预计会将单元格1-1变为绿色,同时使2-1和3-1变为绿色 SSCCE: 普朗克: 因此,代码片

故事: 我创建了一个数组$scope.mainArray,它将使用ng repeat以如下方式显示:

每个对象内部都有一个数组,该数组在使用ng repeat时显示,如下所示:

每个都是一个布尔变量。如果为true,则的背景色将变为绿色。否则,默认背景

问题: 每当我将1布尔值变为true时,该列中的所有都将变为绿色。代码$scope.mainArray[0]。子数组[0]。isGreen=true;预计会将单元格1-1变为绿色,同时使2-1和3-1变为绿色

SSCCE: 普朗克:

因此,代码片段: angular.moduleApp,[] .controllerController,功能$scope{ var initSubArray=函数{ 风险值数据=[{ 价值:1, 标签:1, 伊斯格林:错 }, { 价值:2, 标签:2, 伊斯格林:错 }, { 价值:3, 标签:3, 伊斯格林:错 }]; 返回数据; }; var initMainArray=函数{ 风险值数据=[{ 价值:1, 标签:1 }, { 价值:2, 标签:2 }, { 价值:3, 标签:3 }]; 返回数据; }; var子数组=函数{ var子阵列=初始子阵列; 对于i=0;i<$scope.mainArray.length;i++{ $scope.mainArray[i]。子阵列=子阵列; } }; $scope.init=函数{ $scope.mainArray=initMainArray; 子阵; $scope.mainArray[0]。子数组[0]。isGreen=true; }; }; 桌子{ 边界塌陷:塌陷; } 运输署{ 边框:实心; } 格林先生{ 背景色:00FF00; } {{foo.label} {{foo.label}-{{bar.label}
问题是您只有一个子阵列对象。你也有三个参考资料。进行更改时,您正在更改所有行正在使用的子阵列

您可以通过更改以下内容来解决此问题:

var putSubArray = function() {
    var subArray = initSubArray();
    for (i = 0; i < $scope.mainArray.length; i++) {
        $scope.mainArray[i].subArray = subArray;
    }
};


或者是一个更整洁的变体

问题是您只有一个子阵列对象。你也有三个参考资料。进行更改时,您正在更改所有行正在使用的子阵列

您可以通过更改以下内容来解决此问题:

var putSubArray = function() {
    var subArray = initSubArray();
    for (i = 0; i < $scope.mainArray.length; i++) {
        $scope.mainArray[i].subArray = subArray;
    }
};


或者是一个更整洁的变体,只要替换下面的函数“查找代码段”。另外添加了angular.copy以避免引用。


只需替换下面的函数,查找代码段。另外添加了angular.copy以避免引用。


问题是您正在引用子阵列对象。这意味着,当您从mainArray内的元素更改子阵列时,原始对象也会更改

mainArray中其余元素的子阵列对象也将更改。为了避免这种情况,我建议您在子数组函数内部使用:

var putSubArray = function() {
    var subArray = initSubArray();
    for(i = 0; i < $scope.mainArray.length; i++ ) {
        $scope.mainArray[i].subArray = angular.copy(subArray);
    }
};
我还更新了你的


您可以看到更详细的解释

问题在于您正在引用子阵列对象。这意味着,当您从mainArray内的元素更改子阵列时,原始对象也会更改

mainArray中其余元素的子阵列对象也将更改。为了避免这种情况,我建议您在子数组函数内部使用:

var putSubArray = function() {
    var subArray = initSubArray();
    for(i = 0; i < $scope.mainArray.length; i++ ) {
        $scope.mainArray[i].subArray = angular.copy(subArray);
    }
};
我还更新了你的

您可以看到更详细的解释

var putSubArray = function() {
    var subArray = initSubArray();
    for(i = 0; i < $scope.mainArray.length; i++ ) {
        $scope.mainArray[i].subArray = angular.copy(subArray);
    }
};
var putSubArray = function() {
    var subArray = initSubArray();
    for(i = 0; i < $scope.mainArray.length; i++ ) {
        $scope.mainArray[i].subArray = angular.copy(subArray);
    }
};