Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何添加嵌套数组的属性_Javascript_Angularjs_Lodash - Fatal编程技术网

Javascript 如何添加嵌套数组的属性

Javascript 如何添加嵌套数组的属性,javascript,angularjs,lodash,Javascript,Angularjs,Lodash,我对我的逻辑没有什么异议 我有一个手风琴,我拍了张照片 HTML中有头条直播博彩、MLB、MLB道具和NBA(实际上是一个包含近25项运动的列表) 使用这个console.log(angular.toJson($scope.sports,'pretty')我得到了这个json 如您所见,标题,例如:第一个标题:LIVE Boting,包含一个数组leagues,其中有一个名为OfferingSavaailable的道具,因此我需要将每个OfferingSavaailable放在里面,并将总额放

我对我的逻辑没有什么异议

我有一个手风琴,我拍了张照片

HTML中有头条直播博彩、MLB、MLB道具和NBA(实际上是一个包含近25项运动的列表)

使用这个
console.log(angular.toJson($scope.sports,'pretty')我得到了这个json

如您所见,标题,例如:第一个标题:LIVE Boting,包含一个数组
leagues
,其中有一个名为
OfferingSavaailable
的道具,因此我需要将每个
OfferingSavaailable
放在里面,并将总额放入
$scope
变量中,以便在DOM中显示它

[
  {
    "id": 26,
    "name": "LIVE BETTING",
    "priority": 0,
    "leagues": [
      {
        "id": "3042",
        "composedId": "3042G",
        "name": "NBA - Live",
        "lineType": "G",
        "part": 0,
        "offeringsAvailable": 3,
        "sport": {
          "id": 26
        }
      },
      {
        "id": "3042",
        "composedId": "3044Q",
        "name": "NBA - Live (2Q)",
        "lineType": "Q",
        "part": 2,
        "offeringsAvailable": 2,
        "sport": {
          "id": 26
        }
      },
      {
        "id": "3042",
        "composedId": "3045Q",
        "name": "NBA - Live (3Q)",
        "lineType": "Q",
        "part": 3,
        "offeringsAvailable": 2,
        "sport": {
          "id": 26
        }
      },
      {
        "id": "3042",
        "composedId": "3046Q",
        "name": "NBA - Live (4Q)",
        "lineType": "Q",
        "part": 4,
        "offeringsAvailable": 2,
        "sport": {
          "id": 26
        }
      },
      {
        "id": "3068",
        "composedId": "3068G",
        "name": "Soccer - Live",
        "lineType": "G",
        "part": 0,
        "offeringsAvailable": 41,
        "sport": {
          "id": 26
        }
      },
      {
        "id": "3295",
        "composedId": "3295G",
        "name": "MLB - Live",
        "lineType": "G",
        "part": 0,
        "offeringsAvailable": 19,
        "sport": {
          "id": 26
        }
      },
      {
        "id": "3314",
        "composedId": "3314G",
        "name": "Tennis - Live",
        "lineType": "G",
        "part": 0,
        "offeringsAvailable": 1,
        "sport": {
          "id": 26
        }
      },
      {
        "id": "6250",
        "composedId": "6250G",
        "name": "NHL - Live",
        "lineType": "G",
        "part": 0,
        "offeringsAvailable": 4,
        "sport": {
          "id": 26
        }
      },
      {
        "id": "6250",
        "composedId": "6252P",
        "name": "NHL - Live (2P)",
        "lineType": "P",
        "part": 2,
        "offeringsAvailable": 2,
        "sport": {
          "id": 26
        }
      },
      {
        "id": "6250",
        "composedId": "6253P",
        "name": "NHL - Live (3P)",
        "lineType": "P",
        "part": 3,
        "offeringsAvailable": 2,
        "sport": {
          "id": 26
        }
      },
      {
        "id": "6711",
        "composedId": "6711G",
        "name": "NCAA Baseball - Live",
        "lineType": "G",
        "part": 0,
        "offeringsAvailable": 1,
        "sport": {
          "id": 26
        }
      }
    ],
    "img": "images/icons/icon_live_betting.svg"
  },
  {
    "id": 6,
    "name": "MLB",
    "priority": 1,
    "leagues": [
      {
        "id": "1496",
        "composedId": "1496G",
        "name": "MLB",
        "lineType": "G",
        "part": 0,
        "offeringsAvailable": 72,
        "sport": {
          "id": 6
        }
      },
      {
        "id": "1496",
        "composedId": "1497I",
        "name": "MLB (1I)",
        "lineType": "I",
        "part": 1,
        "offeringsAvailable": 30,
        "sport": {
          "id": 6
        }
      },
      {
        "id": "1496",
        "composedId": "1498I",
        "name": "MLB (2I)",
        "lineType": "I",
        "part": 2,
        "offeringsAvailable": 30,
        "sport": {
          "id": 6
        }
      },
      {
        "id": "1721",
          "id": 6
        }
      },
      {
        "id": "2012",
        "composedId": "2012T",
        "name": "MLB - Alternate Runlines",
        "lineType": "T",
        "part": 0,
        "offeringsAvailable": 30,
        "sport": {
          "id": 6
        }
      }
    ],
    "img": "images/icons/icon_mlb.svg"
  },
  {
    "id": 41,
    "name": "MLB  Props",
    "priority": 2,
    "leagues": [
      {
        "id": "6726",
        "composedId": "6726G",
        "name": "MLB Props - Runs+Hits+Error",
        "lineType": "G",
        "part": 0,
        "offeringsAvailable": 15,
        "sport": {
          "id": 41
        }
      },
      {
        "id": "6727",
        "composedId": "6727G",
        "name": "MLB Props - Team to score 1st",
        "lineType": "G",
        "part": 0,
        "offeringsAvailable": 15,
        "sport": {
          "id": 41
        }
      },
      {
        "id": "6728",
        "composedId": "6728G",
        "name": "MLB Props - 1st inning run?",
        "lineType": "G",
        "part": 0,
        "offeringsAvailable": 15,
        "sport": {
          "id": 41
        }
      },
      {
        "id": "6731",
        "composedId": "6731G",
        "name": "MLB Props - 1st Called pitch",
        "lineType": "G",
        "part": 0,
        "offeringsAvailable": 30,
        "sport": {
          "id": 41
        }
      },
      {
        "id": "6732",
        "composedId": "6732G",
        "name": "MLB Props - Players Matchups",
        "lineType": "G",
        "part": 0,
        "offeringsAvailable": 30,
        "sport": {
          "id": 41
        }
      },
      {
        "id": "6741",
        "composedId": "6741G",
        "name": "MLB Props - 1st inning line",
        "lineType": "G",
        "part": 0,
        "offeringsAvailable": 15,
        "sport": {
          "id": 41
        }
      }
    ],
    "img": "images/icons/icon_mlb.svg"
  },
  ... "composedId": "1721T",
        "name": "MLB - Grand Salami",
        "lineType": "T",
        "part": 0,
        "offeringsAvailable": 8,
        "sport": {
          "id": 6
        }
      },
      {
        "id": "2012",
        "composedId": "2012T",
        "name": "MLB - Alternate Runlines",
        "lineType": "T",
        "part": 0,
        "offeringsAvailable": 30,
        "sport": {
          "id": 6
        }
      }
    ],
    "img": "images/icons/icon_mlb.svg"
  },
  {
    "id": 41,
    "name": "MLB  Props",
    "priority": 2,
    "leagues": [
      {
        "id": "6726",
        "composedId": "6726G",
        "name": "MLB Props - Runs+Hits+Error",
        "lineType": "G",
        "part": 0,
        "offeringsAvailable": 15,
        "sport": {
          "id": 41
        }
      },
      {
        "id": "6727",
        "composedId": "6727G",
        "name": "MLB Props - Team to score 1st",
        "lineType": "G",
        "part": 0,
        "offeringsAvailable": 15,
        "sport": {
          "id": 41
        }
      },
      {
        "id": "6728",
        "composedId": "6728G",
        "name": "MLB Props - 1st inning run?",
        "lineType": "G",
        "part": 0,
        "offeringsAvailable": 15,
        "sport": {
          "id": 41
        }
      },
      {
        "id": "6731",
        "composedId": "6731G",
        "name": "MLB Props - 1st Called pitch",
        "lineType": "G",
        "part": 0,
        "offeringsAvailable": 30,
        "sport": {
          "id": 41
        }
      },
      {
        "id": "6732",
        "composedId": "6732G",
        "name": "MLB Props - Players Matchups",
        "lineType": "G",
        "part": 0,
        "offeringsAvailable": 30,
        "sport": {
          "id": 41
        }
      },
      {
        "id": "6741",
        "composedId": "6741G",
        "name": "MLB Props - 1st inning line",
        "lineType": "G",
        "part": 0,
        "offeringsAvailable": 15,
        "sport": {
          "id": 41
        }
      }
    ],
    "img": "images/icons/icon_mlb.svg"
  },
  ...
我正在使用
LODASH
对数组进行迭代。但我不知道如何才能完成这项任务

编辑

不要感到困惑,因为我上面提到了现场投注,我的意思是,我希望阵列中的每项运动都会发生同样的情况。

试试:

// in view, replace
{{sport.leagues.length}}

// with
{{ total(sport) }}

//in controller, add scope method
$scope.total = function(sport) {
    return _.sum(_.pluck(sport.leagues, 'offeringsAvailable'));
}
尝试:

尝试:

尝试:


当您收到数据时,建议只在每个运动项目上循环,并添加一个包含总和的
offices
属性

sports.forEach(function(sport){ 
    sport.offerings=sport.leagues.reduce(function(prev,curr){     
        return prev + (curr.offeringsAvailable||0);
    },0);
});

然后在标题中使用
{{sport.offices}}

建议在接收数据时在每个运动上循环,并添加包含总和的
offices
属性

sports.forEach(function(sport){ 
    sport.offerings=sport.leagues.reduce(function(prev,curr){     
        return prev + (curr.offeringsAvailable||0);
    },0);
});

然后在标题中使用
{{sport.offices}}

建议在接收数据时在每个运动上循环,并添加包含总和的
offices
属性

sports.forEach(function(sport){ 
    sport.offerings=sport.leagues.reduce(function(prev,curr){     
        return prev + (curr.offeringsAvailable||0);
    },0);
});

然后在标题中使用
{{sport.offices}}

建议在接收数据时在每个运动上循环,并添加包含总和的
offices
属性

sports.forEach(function(sport){ 
    sport.offerings=sport.leagues.reduce(function(prev,curr){     
        return prev + (curr.offeringsAvailable||0);
    },0);
});
然后在标题中使用
{{sport.offices}}