问答

面试题:js实现路径查找

作者:admin 2021-05-06 我要评论

描述:var a = {a: {b: {c: 1}, d: [1,2]}, e: 's'} 输出 [{key: 'abc', value: 1}, {key: 'ad', value: [1,2]}, {key: 'e', value: 's'}] this is my answer fu...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

描述:var a = {a: {b: {c: 1}, d: [1,2]}, e: 's'} 输出 [{key: 'abc', value: 1}, {key: 'ad', value: [1,2]}, {key: 'e', value: 's'}]

this is my answer

function getVal(obj,k="",arr=[]){
    for(var key in obj){
        if(Object.prototype.toString.call(obj[key]) === "[object Object]"&&obj[key]!==null){
           getVal(obj[key],k+key,arr)
        }else{
            arr.push({
                key:k+key,
                value:obj[key]
            })
        }
    }
    return arr;
}
getVal(a)

what's the better?

###
function getVal(obj, key = '') {
  return Object.entries(obj).map(item => {
    return Object.prototype.toString.call(item[1]) === '[object Object]'
      ? getVal(item[1], key + item[0])
      : { key: key + item[0], value: item[1] }
  }).flat()
}
###

也可以利用树的遍历。

function getVal(data) {
    // 非plain对象视为叶子节点
    if(Object.prototype.toString.call(data) !== '[object Object]') {
        return [{
            key: '',
            value: data
        }];
    }
    const result = [];
    Object.keys(data).forEach(key => {
        const childList = getVal(data[key]);
        childList.forEach(child => {
            child.key = key + child.key;
            result.push(child);
        })
    })
    return result;
}

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 面试题:js实现路径查找

    面试题:js实现路径查找

  • js 树形结构数据根据条件改造

    js 树形结构数据根据条件改造

  • 合并两个对象后改变属性值原对象值也改

    合并两个对象后改变属性值原对象值也改

  • js数据递归,组成树形结构数据,求指教

    js数据递归,组成树形结构数据,求指教

腾讯云代理商
海外云服务器