多层分类获取

周五临下班时遇到一个需求是要获取商品目录下的所有叶子目录,可能是五一加班的缘故,一时没想明白改怎么弄,周六用javascript实现了一下。


require(['lib/jquery-1.9.1'], function () {
	var categorys = [
		{id: 1, pid: 0, name: "广东省"},
		{id: 2, pid: 0, name: "湖南省"},
		{id: 3, pid: 1, name: "梅州市"},
		{id: 4, pid: 2, name: "长沙市"},
		{id: 5, pid: 3, name: "平远县"},
		{id: 6, pid: 4, name: "韶山冲"},
		{id: 7, pid: 5, name: "大柘"},
		{id: 8, pid: 1, name: "广州市"},
		{id: 9, pid: 1, name: "白云区"}


	];
	var sonCategorys = getSonCategorys(1);
	sonCategorys = getNextCategorys(sonCategorys, sonCategorys);
	console.log("allSubNodes", sonCategorys);
	function getNextCategorys(nodes, nexNodes) {
		var tempNodes = nodes;
		var tempNextNodes = [];
		var isExitNextNodes = false;
		for (var i in nexNodes) {
			var nextNode = nexNodes[i];
			tempNextNodes = getSonCategorys(nextNode.id);
			if (isNotEmpty(tempNextNodes)) {
				isExitNextNodes = true;
			}
			for (var k in tempNextNodes) {
				tempNodes.push(tempNextNodes[k]);
			}
		}
		if (isExitNextNodes) {
			tempNodes = getNextCategorys(tempNodes, tempNextNodes);
		} 
		return tempNodes;
	}

	function getSonCategorys(id) {
		var result = [];
		for (var i in categorys) {
			var category = categorys[i];
			if (category.pid === id) {
				result.push(category);
			}
		}
		return result;
	}


	function isNotEmpty(nodes) {
		return nodes && nodes.length > 0;
	}

});



这里主要使用递归的思想来实现的,因为是联系,所以命名可能不是特别好,请忽略。

你可能感兴趣的:(递归,商品目录)