如何在对象内选择值

时间:2015-12-03 21:19:35

标签: angularjs

我正在尝试将数组中的一个或多个值存储到作用域中。这是我的JSONP服务的结果,

angular.callbacks._7({
  "id":157336,"results":[
    {"id":"53db3c790e0a26189a000d09","iso_639_1":"en","key":"ePbKGoIGAXY","name":"Trailer 3","site":"YouTube","size":1080,"type":"Trailer"},
    {"id":"550df44b9251413554004d43","iso_639_1":"en","key":"KlyknsTJk0w","name":"Own it today","site":"YouTube","size":720,"type":"Trailer"},
    {"id":"533ec6fcc3a3685448009ccc","iso_639_1":"en","key":"nyc6RJEEe0U","name":"Teaser","site":"YouTube","size":720,"type":"Trailer"},
    {"id":"5376ab510e0a26141c0005a8","iso_639_1":"en","key":"zSWdZVtXT7E","name":"Trailer","site":"YouTube","size":720,"type":"Trailer"},
    {"id":"545da247c3a3685362005187","iso_639_1":"en","key":"Lm8p5rlrSkY","name":"Trailer 2","site":"YouTube","size":1080,"type":"Trailer"}
  ]
})

我正在尝试将所有key值存储在名为$scope.youtubeTrailer的范围内

但如果我这样做,

$scope.youtubeTrailer = response; 
console.log ($scope.youtubeTrailer)

范围包含一个对象(电影),该对象内部是一个具有5个id的数组。那么这样的东西的正确选择器是什么?

如果我这样搜索,

 console.log ($scope.youtubeTrailer.key)

我得到'未定义'

*编辑*

我试过下面的解决方案,

movieAdd.trailer(movie.id)
  .then(function(response){
    $scope.youtubeTrailer =[];
    console.log ($scope.youtubeTrailer)

    angular.forEach(response.results, function(item){
      console.log ('Hello world')
      if (item.hasOwnProperty('key')) {
        $scope.youtubeTrailer.push(item.key);
      }
    });

console.log ($scope.youtubeTrailer)表示范围为空。并且forEach函数不会触发,因为Hello log未在控制台中显示。如果我将$scope.youtubeTrailer =[];更改为$scope.youtubeTrailer = response;,我确实在范围内有对象,但forEach仍未触发。

*编辑2 *

通过将response.results改为responseforEach会触发。

*编辑3 *

我有点工作了。我在范围内获取数组,但是当我在创建函数中保存范围值时,它在数据库中显示为null。那是因为我试图保存一个数组。使用javascripts join我将数组转换为可以保存的字符串。

movieAdd.trailer(movie.id)
  .then(function(response){
    $scope.youtubeTrailer = [];
    angular.forEach(response, function(item){
      if (item.hasOwnProperty('key')) {
        $scope.youtubeTrailer.push(item.key);
        var youtubeArray = $scope.youtubeTrailer
        var youtubeString = youtubeArray.join();

2 个答案:

答案 0 :(得分:3)

下面的代码基本上是循环遍历response.results数组,其中包含5个对象。每个项目都分配给变量item。检查item属性为key,如果为真,请将item.key的值添加到$scope.youtubeTrailer

$scope.youtubeTrailer =[];
angular.forEach(response.results, function(item) {
  if (item.hasOwnProperty('key')) {
    $scope.youtubeTrailer.push(item.key);
  }
});

以下是Angular ForEach的链接。

答案 1 :(得分:1)

$scope.youtubeTrailer不仅仅是一个对象,它包含一个数组,它在key字段所在的数组中。因此,您将需要使用阵列访问权限访问五个内部项目。例如$scope.youtubeTrailer.results[0].key