js递归怎么写?

地区树数据如[{key:110000,value:'北京市',children:[{key:'110100',value:'市辖区',children:[{key:'110101',value:'东城区'},{key:'110102',value:'西城区'}]}]}],要把它组成以下数据:[{key:'110000',value:'北京市'},{key:'110100',value:'东市辖区',parentkey:'110000'},{key:'110101',value:'东城区',parentkey:'110100'}],求解答

阅读 2.5k
4 个回答
const func = (arr, parentKey) => {
    const newArr = []

    arr.forEach(item => {
        if (parentKey) {
            newArr.push({
                key: item.key,
                value: item.value,
                parentKey
            })
        } else {
            newArr.push({
                key: item.key,
                value: item.value,
            })
        }

        if (item.children && item.children.length > 0) {
            newArr.push(...func(item.children, item.key))
        }
    })
    return newArr
}

console.log(func(arr))
var str = "[{key:110000,value:'北京市',children:[{key:'110100',value:'市辖区',children:[{key:'110101',value:'东城区'},{key:'110102',value:'西城区'}]}]}]";
var obj =eval('('+str+')');
var arr = [];
function f(json){
    if(json instanceof Array){
        for(var i=0;i<json.length;i++){
            var o = {};
            o.key = json[i].key;
            o.value = json[i].value;
            arr.push(o);
            f(json[i].children);
        }
    }
    return;  
}

f(obj);
console.info(JSON.stringify(arr));
function parseTree(obj, parentKey, res) {
    res = res || [];
    obj.forEach(function(item) {
        var o = {
            key: item.key,
            value: item.value
        };
        //传入parentKey
        parentKey && (o.parentKey = parentKey);
        res.push(o)
        item.children && parseTree(item.children, item.key, res);
    })
    return res;
}

//test
var test=[{key:110000,value:'北京市',children:[{key:'110100',value:'市辖区',children:[{key:'110101',value:'东城区'},{key:'110102',value:'西城区'}]}]}];
console.log(parseTree(test));
let f = arr => {
  let result = [];
  arr.forEach(item => {
    result.push({
      key: item.key,
      value: item.value
    })
    if (item.children && item.children.length > 0) {
      result.push(...f(item.children).map(v => 
          v.parentKey 
              ? v 
              : Object.assign(v, {
                  parentKey: item.key
              })
      ))
    }
  })
  return result
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏