我有一个像这样的对象数组:
[{
name: "Peter",
childs: [{
name: "John",
childs: [{
name: "Joseph",
childs: []
}]
}]
},
{
name: "Carl",
childs: [{
name: "Sam",
childs: []
}]
}]
每个人都可以生育孩子,每个孩子都可以有多个孩子等等。有谁知道在underscore.js
上执行此操作的好方法?
答案 0 :(得分:3)
看起来你问的是如何进行树遍历,而不是像underscore.js那样独特。您可以通过这种方式进行深度优先遍历:
var children = [{name: "Peter", childs: [...]}, ...]
function traverseAndPrint(tree) {
for (var i = 0; i < tree.length; i++) {
console.log(tree[i].name);
traverseAndPrint(tree[i].childs);
}
}
如果您需要对每个元素执行任意操作,您可以执行以下操作:
function traverseAndCallFunction(tree, functionToCall) {
for (var i = 0; i < tree.length; i++) {
functionToCall(tree[i]);
traverseAndPrint(tree[i].childs);
}
}
其中functionToCall
是一个接受子对象的函数(根据您的示例)
我不明白为什么你需要使用underscore.js进行树遍历。
答案 1 :(得分:0)
很抱歉,我不知道下划线有多具体,但似乎一个简单的递归函数对你来说很容易。
var data = [{
name: "Peter",
childs: [{
name: "John",
childs: [{
name: "Joseph",
childs: []
}]
}, {
name: "Carl",
childs: [{
name: "Sam",
childs: []
}]
}]
}];
function trav(data, fn) {
data.forEach(function(item) {
for (var p in item)
if (p === "childs")
trav(item[p], fn);
else
fn(item[p], p);
});
}
trav(data, function(val, prop) {
console.log(prop, val);
});