多层数组转换成对象

问题描述

···
[

        [
          [
            145.397978,
            -40.792549
          ],
          [
            146.364121,
            -41.137695
          ],
          [
            146.908584,
            -41.000546
          ],
          [
            147.689259,
            -40.808258
          ],
          [
            148.289068,
            -40.875438
          ]
        ]
      ]
要转转成
[
    [
        {'lng': 145.397978, 'lat': -40.792549},
        {'lng': 146.364121, 'lat': -41.137695},
        {'lng':  146.908584, 'lat': -41.000546},
        {'lng':  148.289068, 'lat': -40.875438},
        ...
    ]
]

就是把一个数组,数组有很多层,最后一层的数组只有两个元素,就是把最后一层转换成一个对象,其余的不动原样返回

问题出现的环境背景及自己尝试过哪些方法

尝试过数组扁平化相关方法https://blog.csdn.net/Freya_y...

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

期待把一个层级很深的数组的最后一层转换成为一个object对象后再返回

阅读 3.3k
2 个回答

`var Arr2Obj = (arr) => {

if (arr.length == 0) return arr;
if (typeof arr[0] == 'number') {
    return {lng:arr[0], lat:arr[1]}
} else {
    return Array.prototype.map.bind(arr)(Arr2Obj)
}

}`

其实把,这就是程序员在难为程序员。 这种数据结构真是吐血。

像这种,所谓的 很多 层, 你只能用递归了。

第一步,写个函数,这个函数的功能就是 把一个拥有2个元素的数组,转为对象,并且返回对象;

  1. 这个数组只有2个元素
  2. 每个元素都是number 类型
  3. 如果不满足,返回false
function arrToObj(arr){
    let [lng,lat] = arr;
    if(typeof lng != 'number' || typeof lat != 'number'){
     return false;
    }else{
      return {
         lng,
         lat
      }
    }
}

// 然后递归被
function test(arr){
    return arr.map(item=>{
      let res = arrToObj(item); // 这里之前少了 item
      if(res){
        return res;
      }else{
        return test(item); // 之前少了 return
      }
    })
}

let arr = [];// 这个是源数据
let data = test(arr);
// 这个data 应该是你想要的

@Brian

没有测试啊,自己测试下

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题