将JSON连接成一个数组 - AngularJS

时间:2017-11-27 08:52:22

标签: javascript angularjs json

我想合并两个API调用。我先打电话通过在后端过滤accound_id来获取一些数据。 在第二次调用中,我使用test_id获取数据。

这是我的/ api / test-overview的JSON:

{
testSprint: [
    {
    account_id: 27,
    test_id: 3,
    name: "Junior"
    },
    {
    account_id: 27,
    test_id: 50,
    name: "Wilson"
    }
 ]
}

当test_id为3时,这是我对activityAvgService的JSON:

{
test_id: "3",
stats: {
    avgE: 2.5,
    avgD: 43.3,
    avgA: 5.7,
    avgH: 6.3,
 highH: 0
 }
}

当test_id为50时,这是JSON:

{
test_id: "50",
stats: {
    avgE: 1,
    avgD: 33,
    avgA: 3,
    avgH: 1,
    highH: 0
  }
}

这是我控制器中的$ http请求。

$http.get("/api/test-overview").then(testResponse => {
        $scope.test = testResponse.data.testSprint;
        for (var i = 0; i < $scope.test.length; i++) {
            activityAvgService.showStatsAVG($scope.test[i].test_id).then(response => {

                var stats = response.data.stats

                console.log("stats", stats);
            });
        }
        console.log("$scope.test", $scope.

我想在第一个JSON / api / test-overview中连接三个JSON。

我想有这样的事情:

    {
        testSprint: [
            {
                account_id: 27,
                test_id: 3,
                name: "Junior",
                stats: {
                    avgE: 2.5,
                    avgD: 43.3,
                    avgA: 5.7,
                    avgH: 6.3,
                highH: 0
                }
            },
            {
                account_id: 27,
                test_id: 50,
                name: "Wilson",
                test_id: "50",
                stats: {
                    avgE: 1,
                    avgD: 33,
                    avgA: 3,
                    avgH: 1,
                    highH: 0
                }
            }
        ]
    }

我尝试使用map和concat,但它没有帮助。知道怎么办

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您需要锁定正在进行内部ajax调用的索引值 i

试试这个

&#13;
&#13;
$http.get("/api/test-overview").then(testResponse => {
      $scope.test = testResponse.data.testSprint;
      for (var i = 0; i < $scope.test.length; i++) {
        (function(test, i) {
          activityAvgService.showStatsAVG(test[i].test_id).then(response => {
            var stats = test[i].stats; //this value will reflect in outer test in below console.log
            console.log(test, stats);
          });
        })($scope.test, i)
      }
    }
&#13;
&#13;
&#13;