我有一个跟随json(示例数据),我从另一个URL
var data = [
{ id: 1, name: 'ravi', parentid: 0 },
{ id: 2, name: 'raj', parentid: 1 },
{ id: 3, name: 'ram', parentid: 1 },
{ id: 4, name: 'raja', parentid: 0 },
{ id: 5, name: 'raju', parentid: 4 },
{ id: 6, name: 'dinesh', parentid: 4 }
];
当我以角度获得成功消息时,我想比较具有id的数据
parentid
为零,剩余数据为parentid
。我尝试了以下代码,但我无法继续执行此操作
$http.get('URL')
.success(function(data) {
var categories = data;
for(var i =0;i<=categories.length;i++)
{
if(typeof categories[i] != "undefined" && categories[i].parentId == 0)
{
$scope.cat.push(categories[i]);
}
if($scope.cat[i].parentid == categories[i].id)
{
$scope.content.push(categories[i]);
}
}
});
在这里,我想将categories[i].parentId
与$scope.cat.id
进行比较并插入到数组中,但在比较时,我收到$scope.cat[i]
之类的错误undefined
最后我的输出如下所示
Ravi
raj
ram
raja
raju
dinesh
答案 0 :(得分:1)
我面临下列3个问题:
if(typeof categories[i] != "undefined" && categories[i].parentId == 0)
中,您正在比较parentId
,它的属性名称永远不会是parentid
(检查大小写)。因此,您的第一个if
循环永远不会被执行,这就是您$scope.cat
未定义的原因。解决方案:更正parentId
if($scope.cat[i].parentid == categories[i].id)
中,您将父元素的父ID与子元素的ID进行比较。解决方案:if($scope.cat[i].id == categories[i].parentid)
解决方案:
var categories = data;
// fill $scope.cat with elements having parent id = 0, so this list will contain all the parent elements
$scope.cat = categories.filter(function(category) {
return category && category.parentid === 0
});
$scope.content = [];
// fill $scope.content with elements whose parent exist in $scope.cat (the parent list craeted above)
categories.forEach(function(category) {
if ($scope.cat.filter(function(cat) {
return category.parentid === cat.id
}).length > 0)
$scope.content.push(category);
});
答案 1 :(得分:0)
尝试这样的事情
替换
@Test
与
if($scope.cat[i].parentid == categories[i].id)
{
$scope.content.push(categories[i]);
}
答案 2 :(得分:0)
undefined
获得$scope.cat[i]
,因为即使在将$scope.cat
更改为parentId
之后,也不会始终执行推送到parentid
的代码
if(typeof categories[i] != "undefined" && categories[i].parentid == 0)
{
$scope.cat.push(categories[i]);
}
对于数据数组的某些值,这种情况不会成立。所以什么都不会被推到$scope.cat
。
并记住您的第二个if
语句出现在您的第一个if
语句之后。所以有时你不会有$scope.cat[i]
对于所有这些值,代码将不会被执行,因为它们没有通过条件
{ id: 2, name: 'raj', parentid: 1 },
{ id: 3, name: 'ram', parentid: 1 },
{ id: 5, name: 'raju', parentid: 4 },
{ id: 6, name: 'dinesh', parentid: 4 }
因为parent id
不是0
因此,这些是导致undefined
您可以更改为:
var categories = data;
for(var i =0;i<=categories.length;i++)
{
if(typeof categories[i] != "undefined" && categories[i].parentid ==0)
{
$scope.cat.push(categories[i]);
}
}
//you will already have you $scope.cat filled then loop through it
//checking with the categories array too.
for(var j=0;j<$scope.cat.length;j++)
{
for(var k=0; k<categories.length; k++){
if($scope.cat[j].parentid==categories[k].id)
{
$scope.content.push(categories[k]);
}
}
}
或类似的内容:
var categories = data;
categories = categories
.filter( (category)=>{
return (category !== []._); //removes all undefineds in the array
})
.map((category)=>{
//checks each category from data if is parent_Id is 0 and pushes it to cats array
//by the end of the operation. the cats array will have some data
(category.parentId == 0)? ($scope.cats.push(category) , return ) : return;
})
var getContent =(cats,categories)=>{
var content=[];
for(var j=0;j<cats.length;j++)
{
for(var k=0; k<categories.length; k++){
if(cats[j].parentid==categories[k].id)
{
content.push(categories[k]);
}
}
}
return content;
}
$scope.content = getContent($scope.cats,categories);