Javascript 使用Angulajs在嵌套数组中动态添加子级
我有一个angularjs数组Javascript 使用Angulajs在嵌套数组中动态添加子级,javascript,arrays,angularjs,nested,Javascript,Arrays,Angularjs,Nested,我有一个angularjs数组 $scope.structure = { folders: [ { name: 'Folder 1', files: [{ name: 'File 1.jpg' }, { name: 'File 2.png' }], folders: [ { name: 'Subfolder 1', files: [{ name: 'Subfile 1.t
$scope.structure =
{
folders: [
{ name: 'Folder 1', files: [{ name: 'File 1.jpg' }, { name: 'File 2.png' }], folders:
[
{ name: 'Subfolder 1', files: [{ name: 'Subfile 1.txt' }], folders:[] },
{ name: 'Subfolder 2', files:[], folders:[] },
{ name: 'Subfolder 3', files:[], folders:[] }
]},
{ name: 'Folder 2', files:[], folders:[] }
],
files: [
{ name: 'File 1.gif' },
{ name: 'File 2.gif' }
]
};
结构如下:
Root
--Folder 1
----Subfolder 1
------Subfile 1.txt
----Subfolder 2
----Subfolder 3
----File 1.jpg
----File 2.png
--Folder 2
--File 1.gif
--File 2.gif
现在,我想在现有文件夹中添加其他文件夹和文件,例如,现有文件夹“子文件夹2”下的文件夹“新建文件夹”
我可以通过以下功能手动执行此操作:
$scope.structure.folders[0].folders[1].folders.push({ name: 'New Folder', files:[], folders:[] });
但是现在我想动态地完成它,只需给出我要添加的文件夹的名称。我需要迭代孔数组并在名称后搜索
但是,如何在阵列中确定适当的位置,以便在以后添加文件夹
如果有人能帮助我,那就太好了
非常感谢
Nico问题是它是一个嵌套列表,其中一个父项与其子项相似,那么这些子项就是其子项的父项。。。这可能会很深 我建议这样做: 如果您喜欢Vanilla JS,您可以编写一个递归函数来迭代文件夹中的文件夹,并执行您需要的任何操作:)下面是一个演示递归的快速示例
var树={
名称:‘A’,
文件夹:[
{
名称:‘B’,
文件夹:[]
},
{
名称:‘C’,
文件夹:[]
}
]
};
函数findFolder(文件夹、名称){
var i;
var匹配;
如果(folder.name==名称){
返回文件夹;
}否则{
对于(i=0;i
问题是,它是一个嵌套列表,其中一个父项与其子项相似,那么这些子项就是其子项的父项。。。这可能会很深
我建议这样做:
如果您喜欢Vanilla JS,您可以编写一个递归函数来迭代文件夹中的文件夹,并执行您需要的任何操作:)下面是一个演示递归的快速示例
var树={
名称:‘A’,
文件夹:[
{
名称:‘B’,
文件夹:[]
},
{
名称:‘C’,
文件夹:[]
}
]
};
函数findFolder(文件夹、名称){
var i;
var匹配;
如果(folder.name==名称){
返回文件夹;
}否则{
对于(i=0;i
我尝试动态设置对象。但我目前找不到最佳的添加方式。坦率地说,我喜欢你的问题。我试着去寻找
/**
*由sherali于2015年8月30日创作。
*/
变量帮助程序={
isEmpty:函数(obj){
return!obj | | obj==null | | obj==undefined | | Array.isArray(obj)和&obj.length==0;
},
clearArray:函数(arr){
if(arr&&Array.isArray(arr)){
arr.length=0;
}
},
pushArray:函数(arr1、arr2){
if(arr1&&arr2&&Array.isArray(arr1)){
arr1.push.apply(arr1,Array.isArray(arr2)?arr2:[arr2]);
}
},
setArray:函数(arr1、arr2){
这个.clearArray(arr1);
这个.pushArray(arr1,arr2);
}
};
函数FileOrFolder(名称、文件夹数组、文件数组、格式、isFile、大小){
变量名,
_文件夹=[],
_文件=[],
_大小=0,
_格式=空,
_isFile=false,
_json={};
var self=这个;
对象。定义属性(此{
姓名:{
get:function(){
返回_name;
},
设置:功能(val){
_name=val;
},
可枚举:true
},
文件夹:{
get:function(){
返回_文件夹;
},
设置:功能(val){
setArray(_folders,val);
},
可枚举:true
},
档案:{
get:function(){
返回_文件;
},
设置:功能(val){
setArray(_文件,val);
},
可枚举:true
},
尺寸:{
get:function(){
返回大小;
},
设置:功能(val){
_size=Helper.isEmpty(val)?0:val;
},
可枚举:true
},
格式:{
get:function(){
返回格式;
},
设置:功能(val){
_格式=val;
},
可枚举:true
},
isFile:{
get:function(){
返回ISU文件;
},
设置:功能(val){
_isFile=val;
},
可枚举:true
},
json:{
get:function(){
返回json;
},
设置:功能(val){
_json=val;
},
可枚举:true
}
});
this.addFileOrFolder=函数(项,isFile){
Object.keys(item.json).forEach(函数(key,i,obj){
if(isFile){
pushArray(_文件,项);
_json[name].files[key]=item.json[
$scope.structure.folders[0].folders[1].folders.push({ name: 'New Folder', files:[], folders:[] });
var tree = {
name: 'A',
folders: [
{
name: 'B',
folders: []
},
{
name: 'C',
folders: []
}
]
};
function findFolder(folder, name) {
var i;
var match;
if(folder.name === name) {
return folder;
} else {
for(i = 0; i < folder.folders.length; i++) {
match = findFolder(folder.folders[i], name);
if(match) {
return folder.folders[i];
}
}
}
}
findFolder(tree, 'C').folders.push({name: 'newFolder', folders: []});
console.log(tree); // There is a newFolder under C.