不是最好的(對不起,凌晨4點)的解決方案,而是通過遞歸直線方式.. 您的結構不支持,在正常這樣,同一級別的文件夾,所以我重新配置它,togerther與它的代碼: http://jsfiddle.net/ma3kno2o/5/
function getFiles(id)
{
var files = searchFolders(jsonStr.hierarchy.folders, false);
alert('Found ' + files.length + " files\n" + JSON.stringify(files));
function searchFolders(tree, count_files)
{
var data = [];
$.each(tree, function(key, val) {
var into = !count_files ? val.id == id : count_files;
if (val.files && into)
$.merge(data, getFiles(val.files));
if (val.folders)
$.merge(data, searchFolders(val.folders, into));
});
return data;
}
function getFiles(tree)
{
var files = [];
if (tree.id) return [tree.id];
$.each(tree, function(key,val) {
if (val.id)
files.push(val.id);
});
return files;
};
}
var jsonStr = {
"hierarchy": {
"date": "2014/09/24 15:21:23",
"folders": [{
"name": "Root",
"id": "Root",
"files": [{
"id": "file.1"
}, {
"id": "file.2"
}, {
"id": "file.3"
}],
"folders": [{
"name": "Level-1",
"id": "1411396172645",
"files": {
"id": "file.4"
},
"folders": [{
"name": "123",
"id": "1411538469568",
"files": [{
"id": "file.5"
}, {
"id": "file.6"
}]},
{
"name": "123",
"id": "1411538469569",
"files": [{
"id": "file.7"
}, {
"id": "file.8"
}]
}]
}]
}]
}
};
的舊代碼將無法正常工作,所以我改寫了它新的雜物
function getFiles(id)
{
var stp = -1;
var files = searchFolders(jsonStr.hierarchy, false);
alert('Found ' + files.length + " files\n" + JSON.stringify(files));
function searchFolders(tree, count_files)
{
var data = [];
var folders = tree.folder.length > 1 ? tree.folder : [tree.folder];
$.each(folders, function(key, val) {
var into = !count_files ? val.id == id : count_files;
if (val.file && into)
$.merge(data, getFiles(val.file));
if (val.folder)
$.merge(data, searchFolders(val, into));
});
return data;
}
function getFiles(tree)
{
var files = [];
if (tree.id) return [tree.id];
$.each(tree, function(key,val) {
if (val.id)
files.push(val.id);
});
return files;
};
}
var jsonStr= {"hierarchy":{"date":"2014/09/24 18:13:00","folder":{"name":"Root","id":"Root","file":[{"id":"file.1"},{"id":"file.2"},{"id":"file.3"}],"folder":[{"name":"Level-1","id":"1411396172645","file":{"id":"file.4"},"folder":{"name":"123","id":"1411538469568","file":[{"id":"file.5"},{"id":"file.6"}],"folder":{"name":"123-a","id":"1411549962260","file":{"id":"file.7"}}}},{"name":"level-2","id":"1411549976987","file":{"id":"file.8"}}]}}};
很明顯,循環所有這些會讓你得到你想要的。但這不是非常有效。我認爲你需要一個不同的結構,所以你可以直接訪問'root',並且可以訪問同一級別的子文件夾,但是需要參考他們的'父'。 – kasimir 2014-09-24 07:16:09
只是一個簡短的提示 - 'jsonStr'不是JSON,它是一個JavaScript對象。 – phuzi 2014-09-24 07:46:45