为什么数组只包含n次的最后一个值?

时间:2017-09-09 07:20:24

标签: javascript angularjs arrays scope

此函数在数组列表中返回相同的值。

例如,如果i=10,那么我的数组应该包含10个不同的值,但它只存储10次的最后一个值。

我的代码有什么问题?

$scope.webTempIds=[];
$scope.wId={};
$scope.getIds=function(){
  for(var i=0;i<$rootScope.retData.length;i++){
    $scope.wId.ID=$rootScope.retData[i].WEBUI_TEMP_ID;
    $scope.webTempIds.push($scope.wId);
  }
  return $scope.webTempIds;
}

4 个答案:

答案 0 :(得分:3)

这是因为您在循环之外的$scope使用wId.ID。因此,您的列表项指向同一个对象。

更改$scope.wId.ID后,列表$scope.webTempIds也会更新。

要修复它,请将id设为local:

for(var i=0;i<$rootScope.retData.length;i++){
     var wId = {
            ID: $rootScope.retData[i].WEBUI_TEMP_ID;
           }
     $scope.webTempIds.push(wId);
}

作为旁注:使用Scope绑定应用程序控制器和视图。 (在for循环中你不需要范围)

答案 1 :(得分:3)

$scope.wId={};

每次都会更改。该数组包含对该对象的引用,因此当您更改该值时,它会更改数组中的值。

&#13;
&#13;
let obj = {};

let result = [];
for(let i = 0; i<10; i++){
    obj.a = i;
    result.push(obj);
}

console.log(result);
&#13;
&#13;
&#13;

答案 2 :(得分:1)

正如其他人已正确指出的那样,您最终得到了数组中的最后一项,因为您推送到数组的值位于devServer: { proxy: { "/": { target: "www.a.com" } } } 上,并且每次都被替换为新值。

要提供替代方法,您可以使用Array.prototype.map函数返回一个预先填充的新数组,其中只包含每个数据项的$scope属性值:

id

这消除了对具有临时变量的任何循环的需要以及从头开始手动构建新数组的任何$scope.getIds=function(){ $scope.webTempIds = $rootScope.retData.map( function(obj){ return obj.id; } ); }

答案 3 :(得分:0)

    $scope.getIds=function(){
        $scope.webTempIds=[];
        for(var i=0;i<$rootScope.retData.length;i++){
            $scope.wId={};
            $scope.wId.ID  =$rootScope.retData[i].WEBUI_TEMP_ID;
            $scope.webTempIds.push($scope.wId);
        }
return $scope.webTempIds;
    }