【问题标题】:Why does array contain only last value n times?为什么数组只包含最后一个值 n 次?
【发布时间】:2018-02-18 01:40:39
【问题描述】:

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

例如,如果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;
}

【问题讨论】:

    标签: javascript angularjs arrays scope


    【解决方案1】:

    正如其他人正确指出的那样,您最终得到数组中的最后一项,因为您推送到数组的值位于 $scope 上,并且每次都被新值替换。

    要提供另一种方法,您可以使用 Array.prototype.map 函数返回一个新数组,其中预填充了每个数据项的 id 属性值:

    $scope.getIds=function(){
      $scope.webTempIds = $rootScope.retData.map(
        function(obj){ 
          return obj.id; 
        }
      );
    }
    

    这消除了任何带有临时变量的循环和任何pushing 从头开始​​手动构建新数组的需要。

    【讨论】:

      【解决方案2】:

      发生这种情况是因为您在循环外使用 $scope 代替 wId.ID。因此,您的列表项指向同一个对象。

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

      要修复它,请将 id 设为本地:

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

      附带说明:使用 Scope 绑定应用程序控制器和视图。 (在 for 循环内你不需要作用域)

      【讨论】:

        【解决方案3】:
            $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;
            }
        

        【讨论】:

          【解决方案4】:
          $scope.wId={};
          

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-07-11
            • 1970-01-01
            • 2020-02-07
            • 2019-10-18
            • 2021-05-10
            • 1970-01-01
            • 1970-01-01
            • 2021-09-20
            相关资源
            最近更新 更多