0

我有一个像这样的 JSON 对象:

$scope.object = {
    'thing1': { 
        'content': 'blah blah',
        'order': '1',
},
    'thing2': { 
        'content': 'blah blah blah',
        'order': '2',
    },
}

我想将与“内容”键对应的值添加到数组中。我认为这会起作用:

  var things=[];
  for (x in $scope.object){
    things.push(x.content);
  }

这没用。它只是返回未定义。有任何想法吗?

4

3 回答 3

1

x枚举 的键$scope.object,而不是值。改用这个:

things.push($scope.object[x].content);
于 2013-07-16T01:37:44.287 回答
0

而不是再次编写所有需要的检查,您可以使用 angularJS 的 jquery.foreach 包装器:

活生生的例子

var result = []
angular.forEach($scope.object, function (value, key) {
    result.push(value.content);
});
于 2013-07-16T06:32:09.250 回答
0
var things = [], x;
for(x in $scope.object){
    if($scope.object.hasOwnProperty(x)){
        if($scope.object[x].content !== undefined){
            things.push($scope.object[x].content);
        }
    }    
}

这涵盖了确保其正常工作所需的所有检查。测试:

var $scope = {};
$scope.object = {
    'thing1': { 
        'content': 'blah blah',
        'order': '1',
    },
    'thing2': { 
        'content': 'blah blah blah',
        'order': '2',
    }
};

var things = [], x;
for(x in $scope.object){
    if($scope.object.hasOwnProperty(x)){
        if($scope.object[x].content !== undefined){
            things.push($scope.object[x].content);
        }
    }    
}

console.log(things);//logs ["blah blah", "blah blah blah"]

Object.hasOwnProperty(propertyName)需要确保对象实际上已被赋予该属性,.content确保该属性在那里并且值不是未定义的。

在以下情况下:

for(var x in object)

x实际上是属性名称,在这种情况下thing1thing2如果 object 被数组替换,则 x 将是每个对象的索引。

于 2013-07-16T01:39:35.940 回答