首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSON推送到javascript中的嵌套JSON对象

JSON推送到javascript中的嵌套JSON对象
EN

Stack Overflow用户
提问于 2015-03-25 08:59:31
回答 2查看 1.5K关注 0票数 0

我对JSON很陌生,我正在从服务器接收的响应中在客户端准备一个JSON对象。我希望数据如下所示

代码语言:javascript
复制
[
 {"number" : "456" , 
  "effort" : [{
    "effort_type" : "A", 
     "act_effort" : 10 },
    {"effort_type" : "B", 
     "act_effort" : 20 }]
 },
 {"number" : "123" , 
  "effort" : [{
    "effort_type" : "A", 
     "act_effort" : 5},
    {"effort_type" : "B", 
     "act_effort" : 30},
     {"effort_type" : "C", 
     "act_effort" : 15}]
 }
]

我正在从服务器接收的响应中创建这个JSON,如下所示

代码语言:javascript
复制
$http.get('/colist').success(function(response) {   
    //console.log ("i GET the data of projects");

            $scope.project = response;
 }

下面是准备我的第二个json对象的代码

代码语言:javascript
复制
 var actEffortData = [];
 var dataSource = $scope.project;
 for(i=0; i<dataSource.length; i++){
    var dupCoFound="N";
    var currentNumber=dataSource[i].number;
    var currentEffort = parseInt(dataSource[i].act_effort); 
    var currentEffortType= dataSource[i].effort_type;
    if(i==0){
       actEffortData.push({ 
           number : currentNumber,
           effort : {
               effort_type:currentEffortType,
               act_effort:currentEffort
           }
       }); 
    } else {
        for(k=0; k < actEffortData.length; k++){
           var dupCEffFound="N";
           if(actEffortData[k].number == currentNumber){
              for(n=0; n < actEffortData[0].effort.length; n++){
                  if(actEffortData[k].effort[n].effort_type == currentEffortType){
                      var currentEffortTemp = actEffortData[k].effort[n].act_effort + currentEffort;
                      actEffortData[k].effort[n].act_effort = currentEffortTemp;
                      dupCEffFound="Y";
                      break;
                  }
              }
              if(dupCEffFound == "N"){
                  var tempActEffort =[];
                  tempActEffort = actEffortData[k].effort;
                  tempActEffort.push({
                      effort_type:currentEffortType,
                      act_effort:currentEffort
                  });  
              }
              dupCoFound = "Y";
              break;
          }
      }
      if (dupCoFound=="N"){
          actEffortData.push({ 
              number : currentNumber,
              effort : {
                  effort_type:currentEffortType,
                  act_effort:currentEffort
              }
          }); 
      }
 }

我收到一个错误如下:

代码语言:javascript
复制
 Error: tempActEffort.push is not a function 

有人能告诉我如何实现这一目标吗?请注意,实际代码比上面的代码具有更多的功能,因此您可能会发现冗余变量的使用。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-25 09:09:37

我在您的代码中观察到一件事:

代码语言:javascript
复制
var tempActEffort =[];
tempActEffort = actEffortData[k].effort;

在这里,您将一个变量'tempActEffort‘声明为一个array.Then,直接将一些值初始化为'tempActEffort = actEffortDatak.effort’,以便将其类型从数组更改为结果类型。因此,push不是定义在其上的函数,因为它目前不是数组类型。

因此,不要将值赋值为'tempActEffort = actEffortDatak.effort‘,而是将其更改为:

代码语言:javascript
复制
tempActEffort.push(actEffortData[k].effort);
票数 1
EN

Stack Overflow用户

发布于 2015-03-25 09:10:09

检查是否

代码语言:javascript
复制
tempActEffort = actEffortData[k].effort;

返回一个数组对象。推送只能应用于数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29251286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档