以角度js动态添加树中的元素

时间:2017-02-22 12:03:05

标签: javascript angularjs

我在angularjs中有一组对象

var list = [{id: 'foo' , value:'bar1'},
 {id: 'foo1' , value:'bar1'}];

我想为第一个id添加一个等于'foo'

的子对象

格式化JSON数据:

[  
   {  
      "id":'foo',
      "value":'bar1',
      "children":{  
         id:'foo',
         value:'baar'
      }
   },
   {  
      "id":'foo1',
      "value":'bar1'
   }
];

我试过了

var tempList = {id:'foo', value:'baar'};

if(list.id =='foo' )
list.id.children = tempList ;

但它没有插入值

4 个答案:

答案 0 :(得分:1)

使用map函数将属​​性添加到对象



var list = [
  {id: 'foo' , value:'bar1'},
  {id: 'foo1' , value:'bar1'}
]; 
 

var tempList = {id:'foo', value:'baar'};

list = list.map(function(obj){
  if(obj.id =='foo'){
    obj.children = tempList ;
  }
  
  return obj
})
console.log(list)




答案 1 :(得分:0)

如果要匹配父列表和子列表的ID,则必须使用foreach,然后使用它 -

angular.forEach(list , function(value, key){
      if(value.id== tempList.id)
         obj.children = tempList ;
   });

希望它能运作

答案 2 :(得分:0)

试试这个,但这会覆盖id值:

 var list = [{id: 'foo' ,
         value:'bar1'},
        {id: 'foo1' ,
         value:'bar1'}];

 var tempList = {id:'foo', value:'baar'};

 list = list.map(function(obj){

 if(obj.id == 'foo')
 {
   delete obj.id;
   obj.id = {}; 
   obj.id.children = tempList ;
 }

 return obj;
});

console.log(list);

答案 3 :(得分:0)

观察: if(list.id == 'foo')语法无效,因为list是一个对象数组。

因此,您可以像list[index].id而不是list.id一样访问ID。

因此,要迭代列表数组,您可以使用JavaScript for...in循环。

<强>样本

var list = [{id: 'foo' , value:'bar1'},
 {id: 'foo1' , value:'bar1'}];
 
 for (var i in list) {
   if(list[i].id =='foo') {
     list[i].children = {  
         id:'foo',
         value:'baar'
      };
   }
 };
 
 console.log(list);