var temp = [];
for(var i=0; i <= data.length; i++) {
temp.push({
id : data[i].id,
chk: data[i].chk === true ? '1' : '2'
});
for(var j=0; j <= data[i].children.length; j++) {
temp.push({
id : data[i].children[j].id,
chk: data[i].children[j].chk === true ? '1' : '2'
});
for(var k=0; k <= data[i].children[j].children.length; k++) {
temp.push({
id : data[i].children[j].children[k].id,
chk: data[i].children[j].children[k].chk === true ? '1' : '2'
});
}
}
}
现在也就我这样的闲人来算算了
####工具util.js
// 提取流数据
function dataParse (stream, f) {
var result = '';
// 提取流数据块
stream.on('data', 'utf8', function (data) {
result += data;
});
// 通过f映射合并后的数据
stream.on('end', function () {
f(result);
});
}
// 操作你的数据树
function compose (data) {
var temp = [];
// 递归遍历数据,并提取
function walk (data) {
// 当目标不再是数组的时候停止
if (data instanceof Array) {
data.forEach(function (item) {
temp.push({
id: item.id,
chk: item.chk === true ? '1' : '2'
});
// 递归子数据
walk(item.childen);
});
}
}
walk(data);
return temp;
}
exports.dataParse = dataParse;
exports.compose = compose;
####主进程main.js
// 启动子进程
var child = require('child_process').spawn('node', ['compose.js']);
var data = [..............]; // 填入data数据
// 恢复子进程输出流数据流入
child.stdout.resume();
// 提取子进程输出流数据,并将结果解析为json对象(数组)
// 操作...
require('./util.js').dataParse(child.stdout, function (result) {
var obj = JSON.parse(result);
// any code...
});
// 向子进程写入数据树(字符串 )
// 由子进程接管递归遍历,并将结果返回主进程
child.stdin.write(JSON.stringify(data));
####计算进程compose.js
var util = require('./util.js');
// 恢复输入流数据流入
process.stdin.resume();
// 提取主进程输入流数据,并将结果解析为json对象(数组)
// compose操作数据树,将结果转换为字符串,发送回主进程
util.dataParse(process.stdin, function (result) {
process.stdout.write(JSON.stringify(util.compose(JSON.parse(result))));
});
@tulayang 没看懂哈~
callback都没有,还callback hell。
@JacksonTian 哈哈哈哈哈
@tulayang 哈哈哈哈哈哈哈哈哈哈,兄弟真有闲情
递归都不会用,唉
一头雾水
用递归不是很简单的么,修改原程序 for(var i=0; i <= data.length; i++) 中 i<data.length , 小于代替小于等于,同j,k循环过程。
//递归函数
fun=function(data){
for(var i=0; i < data.length; i++) {
if(data[i].children.length>0){
temp.push({
id : data[i].id,
chk: data[i].chk === true ? '1' : '2'
});
fun(data[i].children)
}
}
}
var data = [
{"id": 1,"chk": true,"children": [
{"id": 2,"chk": true,"children": [
{"id": 3,"chk": false,"children": [
{"id": 4,"chk": false,"children": []}
]},{"id": 5,"chk": true,"children": [
{"id": 6,"chk": false,"children": []}
]}
]},{"id": 7,"chk": true,"children": [
{"id": 8,"chk": false,"children": [
{"id": 9,"chk": false,"children": []}
]}
]}
]}
];
var temp = [];
fun(data);
console.log(temp);
//输出
[ { id: 1, chk: '1' },
{ id: 2, chk: '1' },
{ id: 3, chk: '2' },
{ id: 5, chk: '1' },
{ id: 7, chk: '1' },
{ id: 8, chk: '2' } ]
@JacksonTian 哈哈,你说的对!
@zensh 是的,我是新手。
@bsspirit 谢谢,后来我是用这种方式解决的。
@zensh 对了,很希望angularjs中文站能有搜索功能,什么时候有空升级一下好吗? 这会很有帮助。
var temp = []; function fun(data){ for(var i = 0, len = data.length; i < len; i++){ temp.push({ id : data[i].id, chk: data[i].chk === true ? ‘1’ : ‘2’ }); if(data[i].children){ fun(data[i].children) } } }
没有callback,就是基本的循环嵌套.