35 lines
1.2 KiB
Java
35 lines
1.2 KiB
Java
var helperCreateTreeFunc = require('./helperCreateTreeFunc')
|
|
|
|
function findTreeItem (parent, obj, iterate, context, path, node, parseChildren, opts) {
|
|
if (obj) {
|
|
var item, index, len, paths, nodes, match
|
|
for (index = 0, len = obj.length; index < len; index++) {
|
|
item = obj[index]
|
|
paths = path.concat(['' + index])
|
|
nodes = node.concat([item])
|
|
if (iterate.call(context, item, index, obj, paths, parent, nodes)) {
|
|
return { index: index, item: item, path: paths, items: obj, parent: parent, nodes: nodes }
|
|
}
|
|
if (parseChildren && item) {
|
|
match = findTreeItem(item, item[parseChildren], iterate, context, paths.concat([parseChildren]), nodes, parseChildren, opts)
|
|
if (match) {
|
|
return match
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 从树结构中查找匹配第一条数据的键、值、路径
|
|
*
|
|
* @param {Object} obj 对象/数组
|
|
* @param {Function} iterate(item, index, items, path, parent, nodes) 回调
|
|
* @param {Object} options {children: 'children'}
|
|
* @param {Object} context 上下文
|
|
* @return {Object} { item, index, items, path, parent, nodes }
|
|
*/
|
|
var findTree = helperCreateTreeFunc(findTreeItem)
|
|
|
|
module.exports = findTree
|