JS函数调用自身
在函数内部调用自身函数的方式为 arguments.callee
[{ id: "a", value: 1, children: [{ id: "b", value: 2, children: [{ id: "c", value: 3, }, { id: "d", value: 4, }, { id: "e", value: 5, }] }] }, { id: "f", value: 3, }, { id: "g", value: 4, children: [{ id: "h", value: 5, }] }]( 1) 实现一个 find 函数, 接收一个参数 value, 返回所有满足该值的 id 数组 find(3); // 返回数组[c,f] (2)实现一个 group 函数,将所有 id 根据 value 进行分组返回 group(); // 返回数组 [[a],[b],[c,f],[d,g],[e,h]]
实现代码:
const data = [
{
id: "a",
value: 1,
children: [
{
id: "b",
value: 2,
children: [
{ id: "c", value: 3, },
{ id: "d", value: 4, },
{ id: "e", value: 5, }]
}
]
},
{ id: "f", value: 3, },
{
id: "g",
value: 4,
children: [{ id: "h", value: 5, }]
}];
console.log(data)
function find(value) {
console.log(this);
console.log(value)
const result = [];
filterValue(this);
// 判断children的值
function filterValue(children) {
if (toString.call(children) === '[object Array]') {
children.map(item => {
console.log(item)
if (item.value === value) {
result.push(item.id);
}
item.children && arguments.callee(item.children);
})
}
}
return result;
}
find.call(data, 3);
function group() {
const result = [];
const valueArr = [];
groupArr(this);
function groupArr(arr) {
if (toString.call(arr) === '[object Array]') {
arr.map(item => {
const idx = valueArr.indexOf(item.value);
if (idx > -1) {
result[idx].push(item.id);
} else {
valueArr.push(item.value);
result.push([item.id]);
}
if (item.children && item.children.length > 0) {
arguments.callee(item.children);
}
})
}
}
console.log(result)
return result;
}
group.call(data);