我是一名自学编程新手,正在使用 Angular、Node.js 和图形数据库 noe4j 开发 Web 应用程序。
我正在尝试使用下划线库方法 _.contains 提取标签数组中包含标签“Core”的术语名称。我一直致力于找出正确的语法,任何指针都将不胜感激(包括避免在 SO 上提出烦人的语法问题的方法)。
我想我要么对循环如何遍历对象有疑问(每个“项目”是否包含一组 {} 中包含的内容?),要么对我尝试的方式有疑问识别循环内的按键完全关闭。
返回数据样本示例:
[{"name":"Sciences","labels":["Term","Science"]},{"name":"Image","labels":["Type","Image","Core"]},{"name":"GIF","labels":["Type","Image"]},{"name":"Infographic","labels":["Type","Image"]},{"name":"Chart","labels":["Type","Image"]},{"name":"Photo","labels":["Type","Image"]},{"name":"Microscope","labels":["Type","Image"]},{"name":"Telescope","labels":["Type","Image"]},{"name":"Text","labels":["Type","Text","Core"]}]
Angular Controller :
function typeCtrl($scope, $http) {
$http({method: 'GET', url:'/query/type' }).
success(function(data){
var theList = [];
for(var item in data) {
if (window._.contains(item.labels, "Core") === true) {
theList.push(item.name);
}
}
$scope.display=theList;
$scope.test = theList;
}).
error(function(data){
$scope.type="Error :("
});
};
最佳答案
您的数据是一个数组而不是对象,因此 for(var item in data)
为您提供像 0,1,2 这样的索引,这可能是一个问题
所以你应该使用
for(var i=0;i<data.length;i++)
要查找 labels 数组是否包含 Core ,您可以使用基本的 indexOf 方法
function typeCtrl($scope, $http){
$http({method:'GET', url:'/query/type'}).
success(function(data){
var theList = [];
for(var i=0;i<data.length;i++){
if (data[i].labels.indexOf("Core") > -1){
theList.push(item.name);
}
}
$scope.display=theList;
$scope.test = theList;
}).
error(function(data){
$scope.type="Error :("
});
};
请参阅示例 fiddle 以了解差异:http://jsfiddle.net/jmBjD/
关于javascript - 当在数组中找到关键字时,循环遍历对象以提取属性名称的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17627581/