原作者是浅提取 提取所有深度的目标属性
var pokemon = [{a:[[{name: ['pikachu','kittydog']}, [{name: 'meowth'}]], {name: 'mr mime'}]}]
console.log(pluck('name',pokemon));
function pluck(keyword:string|number,target:Record<string|number,any>) {
function extract(keyword:string|number,target:any) {
let result:any[] = []
if (typeof target === 'object'){
if (target instanceof Array){
for (let item of target) {
result.push(extract(keyword,item))
}
}else if(target===null){}else{
if(target[keyword] !== undefined){
result.push(target[keyword])
}
for (var keys in target) {
result.push(extract(keyword,target[keys]))
}
}
}
return result
}
function flater(arr:any[]):any[] { // 手写flat
// [[[[[["pikachu","kittydog"],[[],[]]],[["meowth",[]]]],["mr mime",[]]]]] => ['pikachu', 'kittydog', 'meowth', 'mr mime']
let result = []
for (let item of arr) {
if (typeof item === 'object'){
result = flater(result.concat(item)) // 写出来了我却看不懂了??
}else{
result.push(item)
}
}
return result
}
return flater(extract(keyword,target))
// return (<any>extract(keyword,target)).flat(Infinity) // flat
}